home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-12-16 | 37.9 KB | 1,772 lines |
- */beginfile QDOS3_asm
- ; --------------------------------------------------------------
- ; QDOS3_asm - The QDOS kernel
- ; - last modified 06/09/95
- ; QDOS-Amiga sources by Rainer Kowallik
- ; ...latest changes by Mark J Swift
- ; --------------------------------------------------------------
-
- ; --------------------------------------------------------------
- ; Main Microdrive system was here in JS ROM
- L01230:
-
- ; --------------------------------------------------------------
- ;*/beginoverlay
- ;*/beginfilling
- ;NOP0195A:
- ; DCB.w ($195A-(NOP0195A-ORGN))/2,$4E71
- ;L0195A:
- ;*/endfilling
- ;*/endoverlay
- ; --------------------------------------------------------------
- ; Trap clock related Trap #1 calls (d0=$13, $14 $15)
- MT_RCLCK:
- MT_SCLCK:
- MT_ACLCK:
- moveq #0,d0
- bra L003B6
- ;*/beginoverlay
- ;*/beginfilling
- NOP01992:
- DCB.w ($1992-(NOP01992-ORGN))/2,$4E71
- L01992:
- ;*/endfilling
- ;*/endoverlay
- ; --------------------------------------------------------------
- ; screen printing routine for trap #3, d0=5/$9-$36
- ; this routine is extremely slow - it should be speeded up
- ; --------------------------------------------------------------
- ; is called by screen device driver to support TRAP #3
- TRAP3_UP:
- MOVE.B $43(A0),-(A7) ; cursor status
- BLE.S L019A4 ; cursor inactive
- MOVEM.W D0-D2,-(A7) ; calling params of TRAP #3
- JSR GET_CURPos(PC) ;*/undomodify BSR GET_CURPos
- ; get cursor position
- MOVEM.W (A7)+,D0-D2
- L019A4:
- CMPI.B #5,D0 ; IO.SBYTE ?
- BNE.S L019B0
- JSR L01A4C(PC) ;*/undomodify BSR L01A4C
- BRA.S L019CE
- L019B0:
- CMPI.W #$36,D0 ; only SD.xx calls (screen
- ; output)
- BHI.S L019EE
- CMPI.W #$9,D0
- BLT.S L019EE
- BGT.S L019C2
- JSR (A2) ; do extended operation
- ; (SD.EXTOP)
- BRA.S L019CE
- L019C2:
- ADD.B D0,D0 ; adjust D0 for displacement
- MOVEA.W JMP_TB_19f2-$14(PC,D0.W),A3
- LSR.L #1,D0
- JSR TRAP3_UP(PC,A3.W)
- L019CE:
- TST.B (A7)+ ; test cursor status
- BLE.S L019E8 ; inactive
- TST.L D0 ; any errors ?
- BNE.S L019E8
- TST.B $43(A0) ; test cursor status
- BGE.S L019E8 ; inactive
- MOVEM.L D0-D2,-(A7) ; save cursor status
- JSR SD_CURE(PC) ;*/undomodify BSR SD_CURE
- ; reposition cursor
- MOVEM.L (A7)+,D0-D2
- L019E8:
- TST.L D0
- RTS
- L019EC:
- ADDQ.L #4,A7
- L019EE:
- MOVEQ #-15,D0 ; Bad parameter
- BRA.S L019CE
- JMP_TB_19f2:
- DC.W SD_PXENQ-TRAP3_UP ; $0A
- DC.W SD_CHENQ-TRAP3_UP ; $0B
- DC.W SD_BORDR-TRAP3_UP ; $0C
- DC.W SD_WDEF-TRAP3_UP ; $0D
- DC.W SD_CURE-TRAP3_UP ; $0E
- DC.W SD_CURS-TRAP3_UP ; $0F
- DC.W SD_POS-TRAP3_UP ; $10
- DC.W SD_TAB-TRAP3_UP ; $11
- DC.W SD_NL-TRAP3_UP ; $12
- DC.W SD_PCOL-TRAP3_UP ; $13
- DC.W SD_NCOL-TRAP3_UP ; $14
- DC.W SD_PROW-TRAP3_UP ; $15
- DC.W SD_NROW-TRAP3_UP ; $16
- DC.W SD_PIXP-TRAP3_UP ; $17
- DC.W SD_SCROL-TRAP3_UP ; $18
- DC.W SD_SCRTP-TRAP3_UP ; $19
- DC.W SD_SCRBT-TRAP3_UP ; $1A
- DC.W SD_PAN-TRAP3_UP ; $1B
- DC.W L019EC-TRAP3_UP ; Bad parameter return $1C
- DC.W L019EC-TRAP3_UP ; dito $1D
- DC.W SD_PANLN-TRAP3_UP ; $1E
- DC.W SD_PANRT-TRAP3_UP ; $1F
- DC.W SD_CLEAR-TRAP3_UP ; $20
- DC.W SD_CLRTP-TRAP3_UP ; $21
- DC.W SD_CLRBT-TRAP3_UP ; $22
- DC.W SD_CLRLN-TRAP3_UP ; $23
- DC.W SD_CLRRT-TRAP3_UP ; $24
- DC.W SD_FOUNT-TRAP3_UP ; $25
- DC.W SD_RECOL-TRAP3_UP ; $26
- DC.W SD_SETPA-TRAP3_UP ; $27
- DC.W SD_SETST-TRAP3_UP ; $28
- DC.W SD_SETIN-TRAP3_UP ; $29
- DC.W SD_SETFL-TRAP3_UP ; $2A
- DC.W SD_SETUL-TRAP3_UP ; $2B
- DC.W SD_SETMD-TRAP3_UP ; $2C
- DC.W SD_SETSZ-TRAP3_UP ; $2D
- DC.W SD_FILL-TRAP3_UP ; $2E
- DC.W L01BF2-TRAP3_UP ; $2F ; not declared
- DC.W SD_POINT-TRAP3_UP ; $30
- DC.W SD_LINE-TRAP3_UP ; $31
- DC.W SD_ARC-TRAP3_UP ; $32
- DC.W SD_ELLIPs-TRAP3_UP ; $33
- DC.W SD_SCALE-TRAP3_UP ; $34
- DC.W SD_FLOOD-TRAP3_UP ; $35
- DC.W SD_GCUR-TRAP3_UP ; $36
- ; ******************************************************
- ; * Grafical subroutines *
- ; ******************************************************
- L01A4C:
- JSR L01BCE(PC) ;*/undomodify BSR L01BCE
- ; IO.SBYTE
- BLT.S L01A76
- MOVE.B D1,D2
- MOVE.L $18(A0),D0 ; window top left side
- ADD.L $22(A0),D0 ; cursor position
- MOVE.W D0,D1
- SWAP D0
- MOVE.B $42(A0),D3 ; attributes for printing
- ; like underline or colour
- LEA $3A(A0),A1 ; strip colour mask
- MOVEM.L $2A(A0),A2-A3 ; font address
- JSR OUT_CHAR(PC) ;*/undomodify BSR OUT_CHAR
- BRA SD_NCOL
- L01A76:
- RTS
- ; Return window size and cursor position in pixel
- L01A78:
- SD_PXENQ:
- JSR L01BF2(PC) ;*/undomodify BSR L01BF2
- MOVE.L $1C(A0),(A1) ; window size
- MOVE.L $22(A0),$4(A1) ; cursor position
- MOVEQ #0,D0
- RTS
- ; return window size and cursor position in characters
- L01A8A:
- SD_CHENQ:
- BSR.S SD_PXENQ
- MOVE.L D1,-(A7)
- MOVE.W $26(A0),D0
- BSR.S L01AAA
- BSR.S L01AAA
- SUBQ.W #6,A1 ;*/undomend SUBQ.L
- ;*/note #6 sign extended long
- MOVE.W $28(A0),D0 ; cursor Y-increment
- BSR.S L01AAA
- BSR.S L01AAA
- MOVE.L (A7)+,D1
- SUBA.W #$A,A1 ;*/undomend SUBA.L
- ;*/note #$A sign extended long
- MOVEQ #0,D0
- RTS
- L01AAA:
- MOVEQ #0,D1
- MOVE.W (A1),D1
- DIVU D0,D1
- MOVE.W D1,(A1)
- ADDQ.W #4,A1 ;*/undomend ADDQ.L #4,A1
- RTS
- SD_WDEF ; redifines a window
- MOVEM.W D1-D4,-(A7)
- JSR L01C1C(PC) ;*/undomodify BSR L01C1C
- MOVEM.W (A1),D0-D3
- EXG D0,D2
- EXG D1,D3
- MOVEQ #0,D4
- BCLR D4,D0
- BCLR D4,D2
- TST.W D2
- BEQ L01B64
- TST.W D3
- BEQ L01B64
- MOVE.W D0,D4
- ADD.W D2,D4
- BCS L01B64
- CMPI.W #$0200,D4
- BHI.S L01B64
- MOVE.W D1,D4
- ADD.W D3,D4
- BCS.S L01B64
- CMPI.W #$0100,D4
- BHI.S L01B64
- CLR.W $20(A0) ; border width
- BRA.S L01B12
- SD_BORDR ; Sets the border width and colour
- MOVE.B D1,$47(A0) ; border colour
- L01AFC MOVEM.W D1-D4,-(A7)
- CMP.W $20(A0),D2 ; border width
- BEQ.S L01B0A
- JSR L01C1C(PC) ;*/undomodify BSR L01C1C
- L01B0A MOVEM.W $18(A0),D0-D4
- BSR.S L01B6C
- L01B12 MOVE.W $02(A7),D4
- CMPI.W #$0100,D4
- BHI.S L01B64
- BSR.S L01B6E
- MOVEM.W D0-D4,$18(A0) ; window start and size
- BEQ.S L01B60
- MOVE.W (A7),D1
- CMPI.B #$80,D1
- BEQ.S L01B60
- MOVEA.L A7,A1
- JSR L027D8(PC) ;*/undomodify BSR L027D8
- MOVE.W $1A(A0),D1
- BSR.S L01B6C
- NEG.W D4
- EXG D4,D3
- JSR L025BE(PC) ;*/undomodify BSR L025BE
- ADD.W D4,D1
- SUB.W D3,D1
- JSR L025BE(PC) ;*/undomodify BSR L025BE
- ADD.W D3,D1
- SUB.W D4,D1
- EXG D4,D3
- ADD.W D4,D4
- EXG D4,D2
- JSR L025BE(PC) ;*/undomodify BSR L025BE
- ADD.W D4,D0
- SUB.W D2,D0
- JSR L025BE(PC) ;*/undomodify BSR L025BE
- L01B60 MOVEQ #0,D0
- BRA.S L01B66
- L01B64 MOVEQ #-$04,D0
- L01B66 MOVEM.W (A7)+,D1-D4
- RTS
- L01B6C NEG.W D4
- L01B6E ADD.W D4,D1
- ADD.W D4,D4
- SUB.W D4,D3
- BLE.S L01B82
- ADD.W D4,D0
- ADD.W D4,D4
- SUB.W D4,D2
- BLE.S L01B82
- ASR.W #2,D4
- RTS
- L01B82:
- ADDQ.W #4,A7 ;*/undomend ADDQ.L
- ;*/note #4 sign extended long
- BRA.S L01B64
- ; enables the cursor
- L01B86:
- SD_CURE:
- MOVEQ #1,D2
- TST.B $43(A0)
- BGT.S L01BCA
- JSR L01BF2(PC) ;*/undomodify BSR.S L01BF2
- ;*/undomodify nop
- BRA.S L01BAA
- ; suppress the cursor
- L01B94:
- SD_CURS:
- MOVEQ #0,D2
- TST.B $43(A0) ; cursor flag
- BGT.S L01BAA
- MOVE.B D2,$43(A0) ; cursor flag
- BRA.S L01BCA
- L01BA2:
- GET_CURPos:
- MOVE.B $43(A0),D2 ; cursor flag
- BEQ.S L01BCA
- NEG.B D2
- L01BAA:
- JSR L01BCE(PC) ;*/undomodify BSR.S L01BCE
- ;*/undomodify nop
- BLT.S L01BCC
- MOVE.B D2,$43(A0)
- MOVE.L $18(A0),D0
- ADD.L $22(A0),D0
- MOVE.W D0,D1
- SWAP D0
- MOVEM.W $26(A0),D2-D3
- JSR L02548(PC) ;*/undomodify BSR L02548
- L01BCA:
- MOVEQ #0,D0
- L01BCC:
- RTS
- ; verify cursor in window
- L01BCE:
- MOVE.L $22(A0),D0
- BMI.S L01BEE
- TST.W D0
- BMI.S L01BEE
- ADD.L $26(A0),D0
- CMP.W $1E(A0),D0
- BHI.S L01BEE
- SWAP D0
- CMP.W $1C(A0),D0
- BHI.S L01BEE
- MOVEQ #0,D0
- RTS
- L01BEE MOVEQ #-4,D0 ; Out of range
- RTS
- L01BF2:
- TST.B $48(A0) ; new line status
- BEQ.S L01C1A
- L01BF8:
- MOVEM.L D0-D2/A1,-(A7)
- JSR SD_NL(PC) ;*/undomodify BSR.S SD_NL
- ;*/undomodify nop
- BEQ.S L01C12
- MOVEQ #$18,D0
- MOVE.W $28(A0),D1 ; cursor Y-increment
- NEG.W D1
- JSR SD_SCROL(PC) ;*/undomodify BSR SD_SCROL
- CLR.W $22(A0) ; cursor position X
- L01C12:
- SF $48(A0) ; new line status explicit
- MOVEM.L (A7)+,D0-D2/A1
- L01C1A RTS
- L01C1C CLR.L $22(A0) ; set cursor position to 0,0
- BRA.S L01C9A
- SD_POS ; Position cursor at row/column
- MULU $28(A0),D2 ; Y-increment for cursor
- BRA.S L01C2C
- SD_TAB ; position cursor at column
- MOVE.W $24(A0),D2 ; cursor Y position
- L01C2C MULU $26(A0),D1 ; X-increment for cursor
- BRA.S SD_PIXP
- SD_NL ; position cursor at next row
- MOVEQ #0,D1
- MOVE.W $24(A0),D2 ; Y-position for cursor
- ADD.W $28(A0),D2 ; Y-increment for cursor
- BRA.S SD_PIXP
- SD_PCOL ; Position cursor on a new line
- MOVE.W $22(A0),D1 ; X-position for cursor
- SUB.W $26(A0),D1 ; X-increment for cursor
- BRA.S L01C50
- SD_NCOL ; position cursor on previus column
- MOVE.W $22(A0),D1 ; X-position for cursor
- ADD.W $26(A0),D1 ; X-increment for cursor
- L01C50 MOVE.W $24(A0),D2 ; Y-position for cursor
- BRA.S SD_PIXP
- SD_PROW ; position cursor on next column
- MOVE.W $24(A0),D2 ; Y-position for cursor
- SUB.W $28(A0),D2 ; Y-increment for cursor
- BRA.S L01C68
- SD_NROW ; Position cursor on previus row
- MOVE.W $24(A0),D2 ; Y-position for cursor
- ADD.W $28(A0),D2 ; Y-increment for cursor
- L01C68 MOVE.W $22(A0),D1 ; X-position for cursor
- SD_PIXP ; position cursor on next row
- MOVE.W D1,D0
- BLT.S L01CA2
- ADD.W $26(A0),D0 ; X-increment for cursor
- CMP.W $1C(A0),D0 ; X-size of window
- BHI.S L01CA2
- MOVE.W D2,D0
- BLT.S L01CA2
- ADD.W $28(A0),D0 ; Y-increment for cursor
- CMP.W $1E(A0),D0 ; Y-size of window
- BHI.S L01CA2
- L01C88 bsr.l MDTSTFIX ;*/modify BTST #3,$34(A6)
- nop ;*/modify
- BEQ.S L01C94
- BCLR #0,D1
- L01C94 MOVEM.W D1-D2,$22(A0) ; set cursor position
- L01C9A SF $48(A0) ; set explicit new line
- ; status
- MOVEQ #0,D0
- RTS
- L01CA2 MOVEQ #-4,D0 ; Out of range
- RTS
- SD_RECOL ; recolour a window
- MOVEQ #0,D0
- LEA L025D6(PC),A2
- BRA.S L01CE0
- SD_CLEAR ; clear all of a window
- JSR L01C1C(PC) ;*/undomodify BSR L01C1C
- MOVEQ #$20,D0
- SD_CLRTP ; clear top of window
- SD_CLRBT ; clear bottom of window
- SD_CLRLN ; clear cursor line
- SD_CLRRT ; clear right hand end of cursor line
- SUBI.W #$20,D0
- LEA L025BE(PC),A2
- BRA.S L01CDC
- SD_SCROL ; scroll all of a window
- SD_SCRTP ; scroll top of a window
- SD_SCRBT ; scroll the bottom of a window
- SUBI.W #$18,D0
- LEA L025FE(PC),A2
- BRA.S L01CDC
- SD_PAN ; pans all of a window
- SD_PANLN ; pans cursor line
- SD_PANRT ; pans right hand end of cursor line
- SUBI.W #$1B,D0
- LEA L02648(PC),A2
- bsr.l MDTSTFIX ;*/modify BTST #3,$34(A6)
- nop ;*/modify
- BEQ.S L01CDC
- BCLR #0,D1
- L01CDC LEA $36(A0),A1 ; paper colour mask
- L01CE0 MOVEM.L D4-D5,-(A7)
- MOVE.W D1,D4
- MOVE.W D0,D5
- MOVEM.W $18(A0),D0-D3 ; window top left hand pixel
- ; and size
- SUBQ.W #1,D5
- BLT.S L01D22
- BGT.S L01CFA
- MOVE.W $24(A0),D3 ; Y-position for cursor
- BRA.S L01D22
- L01CFA ADD.W $24(A0),D1 ; Y-position for cursor
- SUBQ.W #2,D5
- BGE.S L01D12
- SUB.W $24(A0),D3 ; Y-position for cursor
- MOVE.W $28(A0),D5 ; Y-increment for cursor
- ADD.W D5,D1
- SUB.W D5,D3
- BLE.S L01D24
- BRA.S L01D22
- L01D12 MOVE.W $28(A0),D3 ; Y-increment for cursor
- TST.W D5
- BEQ.S L01D22
- ADD.W $22(A0),D0 ; X-position for cursor
- SUB.W $22(A0),D2 ; X-position for cursor
- L01D22 JSR (A2) ; 2648 / 256E / 25BE / 25FE
- L01D24 MOVEQ #0,D0
- MOVEM.L (A7)+,D4-D5
- RTS
- SD_FILL ; fills rectangular block within window
- LEA L025BE(PC),A3
- BTST #$03,$42(A0) ; XOR character / graphics
- BEQ.S L01D3C
- LEA L025CA(PC),A3
- L01D3C MOVEA.L A1,A2
- SUBQ.W #4,A7 ;*/undomend SUBQ.L #4,A7
- MOVEA.L A7,A1
- JSR L027D8(PC) ;*/undomodify BSR L027D8
- MOVE.L #$01FF01FF,D3
- bsr.l MDTSTFIX ;*/modify BTST #3,$34(A6)
- nop ;*/modify
- BEQ.S L01D58
- BCLR #$10,D3
- L01D58 MOVEM.L (A2),D0/D2
- EXG D0,D2
- AND.L D3,D0
- AND.L D3,D2
- MOVE.L D0,D3
- ADD.L D2,D3
- CMP.W $1E(A0),D3 ; Window y-size
- BGT.S L01D88
- SWAP D3
- CMP.W $1C(A0),D3 ; Window x-size
- BGT.S L01D88
- ADD.L $18(A0),D0 ; window top left
- MOVE.W D2,D3
- SWAP D2
- MOVE.W D0,D1
- SWAP D0
- JSR (A3) ; 25BE / 25CA /27D8
- MOVEQ #0,D0
- L01D84:
- ADDQ.W #4,A7 ;*/undomend ADDQ.L #4,A7
- RTS
- L01D88:
- MOVEQ #-4,D0 ; Out of range
- BRA.S L01D84
- ; set or reset the character fount
- L01D8C:
- SD_FOUNT:
- MOVE.L A1,D0
- BGT.S L01D96
- RLOC0A MOVEA.L #(FONT1-ORG0),A1 ;*/modify LEA FONT1,A1
- ; start of ROM char pattern
- L01D96:
- MOVE.L A2,D0
- BGT.S L01DA0
- RLOC0B MOVEA.L #(FONT2-ORG0),A2 ;*/modify LEA FONT2,A2
- ; second font
- L01DA0:
- MOVEM.L A1-A2,$2A(A0) ; store char font address
- MOVEQ #0,D0
- RTS
- ; -----------------------------------------------------------
- ; TRAP #3 with D0=$27 to $29 : set paper, strip, ink colour
- ; D1= colour , A0= cchannel ID
- ; -----------------------------------------------------------
- L01DAA:
- SD_SETPA:
- SD_SETST:
- SD_SETIN:
- SUBI.W #$27,D0 ; select paper, strip or ink
- MOVE.B D1,$44(A0,D0.W) ; Set paper, strip or ink
- ; colour
- LSL.W #2,D0 ; now we have a long word
- LEA $36(A0,D0.W),A1 ; related colour mask
- MOVEQ #0,D0
- JMP L027D8(PC) ;*/undomodify BRA.L L027D8
- ; calculate acording mask
- ; set flashing
- L01DBE:
- SD_SETFL:
- bsr.l MDTSTFIX ;*/modify BTST #3,$34(A6)
- nop ;*/modify
- BEQ.L L01E3C ;*/undomodify BEQ.S L01E3C
- ;*/undomodify nop
- MOVEQ #$02,D0
- BRA.S L01DD4
- ; Set character writing or plotting mode
- L01DCC:
- SD_SETMD:
- MOVEQ #$0C,D0
- LSL.B #2,D1
- BRA.S L01E3E
- ; set underline
- L01DD2:
- SD_SETUL:
- MOVEQ #$01,D0
- L01DD4:
- TST.B D1
- SNE D1
- BRA.S L01E3E
- ; set character size and spacing
- L01DDA:
- SD_SETSZ:
- JSR L01BF2(PC) ;*/undomodify BSR L01BF2
- ANDI.W #$03,D1
- ANDI.W #$01,D2
- bsr.l MDTSTFIX ;*/modify BTST #3,$34(A6)
- nop ;*/modify
- BEQ.S L01DF2
- BSET #$01,D1
- L01DF2:
- MOVE.B L01E4E(PC,D1.W),$27(A0) ; X-increment for
- ; cursor
- MOVE.B L01E52(PC,D2.W),$29(A0) ; Y-increment for
- ; cursor
- LSL.B #1,D1
- OR.B D2,D1
- LSL.B #4,D1
- MOVEQ #$70,D0
- BSR.S L01E3E
- MOVE.W $22(A0),D0 ; X-position for cursor
- ADD.W $26(A0),D0 ; X-increment for cursor
- CMP.W $1C(A0),D0 ; X-size of window
- BLS.S L01E1A
- JSR L01BF8(PC) ;*/undomodify BSR L01BF8
- L01E1A:
- MOVE.W $24(A0),D0 ; Y-position for cursor
- ADD.W $28(A0),D0 ; Y-increment for cursor
- CMP.W $1E(A0),D0 ; Y-size for cursor
- BLS.S L01E4A
- MOVEQ #$18,D0
- MOVEQ #-$0A,D1
- JSR SD_SCROL(PC) ;*/undomodify BSR SD_SCROL
- SUBI.W #$0A,$24(A0) ; Y-position for cursor
- BGE.S L01E4A
- CLR.W $24(A0) ; set cursor Y-position to 0
- L01E3C:
- BRA.S L01E4A
- L01E3E:
- AND.B D0,D1
- NOT.B D0
- AND.B D0,$42(A0) ; character attributes
- OR.B D1,$42(A0)
- L01E4A:
- MOVEQ #0,D0
- RTS
- L01E4E:
- DC.W $0608,$0C10 ; table for x-increment
- ; (6,8,12,16 pixel)
- L01E52:
- DC.W $0A14 ; table for y-increment
- ; (10,20 pixel)
- ; Sets graphics cursor position
- L01E54:
- SD_GCUR:
- LEA $18(A1),A4
- JSR L021DC(PC) ;*/undomodify BSR L021DC
- MOVE.L L02242(PC),-(A1) ;*/undomodify MOVE.L $2242,-(A1)
- MOVE.W L02240(PC),-(A1) ;*/undomodify MOVE.L $2240,-(A1)
- JSR L020D8(PC) ;*/undomodify BSR L020D8
- LEA L01E90(PC),A3
- JSR RI_A1_EXecb(PC) ;*/undomodify BSR RI_A1_EXecb
- ; Essentially RI.EXECB
- LEA $18(A1),A1
- BSR.S L01E8A
- MOVE.W (A1)+,D1
- BSR.S L01E8A
- MOVE.W $1E(A0),D2
- SUB.W (A1)+,D2
- BSET #$07,$42(A0) ; graphics positioned
- ; characters
- JMP L01C88(PC) ;*/undomodify BRA L01C88
- L01E8A:
- MOVEQ #$02,D0
- JMP RI_EXEC_a1(PC) ;*/undomodify BRA RI_EXEC_a1
- ; table for calculation of pixel graphics
- L01E90:
- DC.B $12,$10,$16,$EE,$DC,$0C,$0E,$FA,$0C,$FB,$E8,$E2
- DC.B $0C,$0E,$0E,$F4,$0A,$F5,0,0
- ; ABS / DUP RCL ? RCL ? - * RCL ? - STO ? RCL ? RCL ?
- ; - * * RCL ? + STO ? END
- ; set window scale
- L01EA4:
- SD_SCALE:
- LEA $4A(A0),A2
- MOVEQ #$12,D0
- L01EAA:
- MOVE.W (A1)+,(A2)+
- SUBQ.W #2,D0 ; reduction *?*
- BNE.S L01EAA
- RTS
- ; turns area flood on and off
- SD_FLOOD:
- MOVEA.L A0,A4
- TST.L D1
- BNE.S L01EC2
- BSR.S L01EFA
- MOVE.B #0,$49(A4) ; fill mode off
- BRA.S L01EF4
- L01EC2:
- CMPI.L #$01,D1
- BNE.S L01EE4
- BSR.S L01EFA
- MOVE.B #1,$49(A4) ; fill mode on
- MOVE.L #$0410,D1
- JSR MM_ALCHP(PC) ;*/undomodify BSR MM_ALCHP
- ; Allocate common heap
- BNE.S L01EF6
- MOVE.L A0,$5C(A4) ; pointer to fill buffer
- BRA.S L01EF4
- L01EE4:
- BTST #0,D1
- BEQ.S L01EF0
- CLR.L $60(A4) ; clear pointer to user
- ; defined fill vectors
- BRA.S L01EF4
- L01EF0:
- MOVE.L D1,$60(A4) ; set pointer to fill
- ; vectors
- L01EF4:
- MOVEQ #0,D0
- L01EF6:
- MOVEA.L A4,A0
- RTS
- L01EFA:
- TST.B $49(A4) ; fill mode
- BEQ.S L01F08
- MOVEA.L $5C(A4),A0 ; pointer to fill buffer
- JSR MM_RECHP(PC) ;*/undomodify BSR MM_RECHP
- ; release common heap
- L01F08:
- RTS
- SD_POINT ; plots a point
- MOVE.L A4,-(A7)
- LEA $C(A1),A4 ; Duplicate coordinates
- MOVE.L -(A4),-(A1)
- MOVE.L -(A4),-(A1)
- MOVE.L -(A4),-(A1)
- MOVEA.L (A7)+,A4 ; and plot line
- SD_LINE ; plots a line
- MOVEM.L A3/A5,-(A7)
- LEA L01F26(PC),A3
- SUBQ.L #6,A1
- BRA L02100
- L01F26 DC.W 1 ; displ. for point and line
- ; routine 1
- DC.W LINE_TB_end-1-* ; calculate nothing
- DC.W L0205C-* ; first routine for
- ; calculation
- DC.W LINE_TB-* ; address of 2nd op. table
- DC.W L02136-* ; second routine for
- ; calculation
- LINE_TB:
- DC.W $DC16,$D00C,$1616,$1616,$E8F4
- ; RCL 36 DUP RCL 48 - DUP DUP DUP DUP RCL 24 RCL
- ; 12
- DC.W $0CBE,$0EFA,$EE0C,$BE0E,$DC16,$1600
- ; - RCL 66 * RCL 6 RCL 18 - RCL 66 * RCL 36 DUP
- ; DUP END
- LINE_TB_end:
- SD_ARC ; plots an arc
- MOVEM.L A3/A5,-(A7)
- LEA 2(A1),A4
- TST.L (A4)+
- BGT.S L01F64
- MOVEQ #$14,D0 ; RI.NEG
- JSR RI_EXEC_a1(PC) ;*/undomodify BSR RI_EXEC_a1
- ; essentially RI.EXEC
- MOVEM.L (A4)+,D2-D7
- MOVEM.L D2-D4,-(A4)
- MOVEM.L D5-D7,-(A4)
- L01F64 LEA L01F6C(PC),A3
- BRA L02100
- L01F6C DC.W 3 ; routine and table
- DC.W LINE_TB_end-1-* ; Calculate nothing
- DC.W L0205C-* ; first calculation routine
- DC.W ARC_TB1-* ; $C = 12 table of operators
- DC.W L01FA8-* ; calculation routine
- DC.W ARC_TB2-* ; operator table
- DC.W L01FCE-* ; RTS
- DC.W ARC_TB3-* ; operator table
- DC.W L02136-* ; calculation routine
- ARC_TB1:
- DC.W $FAEE,$0CE2,$C40E,$B810,$D00A,$F4E8,$0C16
- DC.W $160E,$A616,$0E0A,$E2CA,$101A,$160A,$160E,$1016
- DC.W $289A,$A6B2,$0A10,$24E2,$CA10,$0C00
- L01FA8 TST.B -$58(A4) ; -88(A4)
- BMI.S L01FBC
- MOVE.L L0224E(PC),-(A1) ; PI floating point Mantissa
- MOVE.W L0224C(PC),-(A1) ; exponent
- MOVEQ #$0A,D0 ; RI.ADD
- BSR RI_EXEC_a1
- L01FBC MOVE.L -$1E(A4),D0
- SWAP D0
- SUBQ.W #1,D0
- SWAP D0
- CMP.L L0224C(PC),D0 ; PI ?
- BLT.S L01FCE
- CLR.L D2
- L01FCE RTS
- ARC_TB2 ; second arithmetic commandstring from SD_ARC
- DC.W $16E2,$0A16,$0A18,$D00A,$A716,$1816,$8E0E
- DC.W $CA8E,$1016,$B9B3,$881A,$168E,$0E89,$8F94,$9B00
- ; DUP RCL 30 + DUP + COS RCL 48 + STO 90 DUP COS DUP RCL 114
- ; *
- ; RCL 54 RCL 114 / DUP STO 72 STO 78 RCL 120 SIN DUP RCL 114
- ; * STO 120
- ; STO 114 RCL 108 STO 102 END
- SD_ELLIPs ; plots an ellipse
- MOVEM.L A3/A5,-(A7)
- LEA L01FFC(PC),A3
- BRA L02100
- L01FFA RTS
- L01FFC DC.W 3
- DC.W ELLIPS_1tb-*
- DC.W ELLIPS_Do-*
- DC.W END_ELLIps_1tb-1-* ; do nothing
- DC.W L0205C-*
- DC.W ELLIPS_2tb-*
- DC.W L01FFA-* ; RTS
- DC.W ARC_TB3-*
- DC.W L02136-*
- ELLIPS_1tb:
- DC.W $E812,$E9EE,$EE12,$E80E,$EF00
- END_ELLIps_1tb:
- ELLIPS_Do:
- CMPI.W #$0801,(A1)
- ADDQ.W #6,A1 ;*/undomend ADDQ.L #6,A1
- BGE.S L02032
- MOVE.L #$6487ED51,-(A1) ; 1.570796 = PI/2
- MOVE.W #$0801,-(A1)
- LEA L02034(PC),A3
- JSR RI_A1_EXecb(PC) ;*/undomodify BSR RI_A1_EXecb
- ; essentially RI.EXECB
- L02032 RTS
- L02034 DC.B $0A,$EE,$E8,$EF,$E9,0
- ; + RCL 18 RCL 24 STO 18 STO 24 END
- ELLIPS_2tb:
- DC.W $DCC4,$160A,$E816,$0EEE,$160E,$E21A,$16E8,$0E16
- DC.W $FA0A,$16FB,$EFE2,$1816,$E80E,$1614,$F40A,$16F5
- DC.W $E900
- L0205C ; called by SD_LINE and SD_ARC before coordinate
- ; calculation
- MOVEM.L D0-D1/A4,-(A7)
- CLR.L -(A1)
- CLR.W -(A1)
- MOVEQ #1,D0
- ROR.L #2,D0
- MOVE.W #$0800,D1
- MOVEQ #4,D2
- L0206E MOVE.L D0,-(A1)
- MOVE.W D1,-(A1)
- ADDQ.W #1,D1
- DBF D2,L0206E
- ADDQ.W #1,(A1)
- LEA L02252(PC),A3
- MOVEQ #8,D2
- L02080 MOVE.W -(A3),-(A1)
- DBF D2,L02080
- ;*/beginoverlay
- ;*/beginremove
- ; MOVE.W $1C(A0),-$1A(A6) ; window size X
- ; MOVE.W $1E(A0),-$1E(A6) ; Y size
- ; CLR.W -$1C(A6)
- ; CLR.W -$20(A6)
- ; MOVE.W $18(A0),-$34(A6) ; window top left
- ; MOVE.W $1A(A0),-$38(A6)
- ; CLR.W -$36(A6)
- ; CLR.W -$3A(A6)
- ; MOVE.B $42(A0),-$23(A6) ; character attributes
- ; MOVE.B $49(A0),-$32(A6) ; fill mode
- ; MOVE.L $5C(A0),-$2A(A6) ; pointer to fill buffer
- ; MOVE.L $60(A0),-$2E(A6) ; pointer to fill vectors
- ;*/endremove
- ;*/begininsert
- lea -$3E(a6),a3
- move.l A0,(a3)+ ; channel def
- clr.w (a3)+
- MOVE.W SD_YMIN(A0),(a3)+ ; window top
- clr.w (a3)+
- MOVE.W SD_XMIN(A0),(a3)+ ; window left
- MOVE.B SD_FMOD(A0),(a3) ; fill mode
- lea $4(a3),a3
- MOVE.L SD_FUSE(A0),(a3)+ ; pointer to fill vectors
- MOVE.L SD_FBUF(A0),(a3)+ ; pointer to fill buffer
- lea $3(a3),a3
- MOVE.B SD_CATTR(A0),(a3)+ ; character attributes
- lea $2(a3),a3
- clr.w (a3)+
- MOVE.W SD_YSIZE(A0),(a3)+ ; window Y size
- clr.w (a3)+
- MOVE.W SD_XSIZE(A0),(a3)+ ; window X size
- ;*/endinsert
- MOVEQ #1,D2
- BSR.S L020D8
- LEA L020EE(PC),A3 ; operation list (now
- BSR RI_A1_EXecb
- MOVEM.L (A7)+,D0-D1/A4
- RTS
- ; -------------------------------------------------
- L020D8 MOVE.W $1E(A0),-(A1) ; Y-size of Window
- SUBQ.W #1,(A1)
- MOVEQ #$08,D0 ; Convert integer to float
- BSR RI_EXEC_a1
- MOVE.L $58(A0),-(A1) ; scale factor (float)
- MOVE.W $56(A0),-(A1)
- RTS
- ; -------------------------------------------------
- L020EE DC.B $12,$10,$16,$FA,$0E,$FB,$16,$F4,$0E,$F5
- DC.B $16,$EE,$0E,$EF,$E8,$0E,$E9,0
- ; ABS / DUP RCL ? * STO ? DUP RCL ? * STO ?
- ; DUP RCL ? * STO ? RCL ? * STO ? END
- L02100 MOVEM.L D1-D7/A0/A2/A4-A6,-(A7)
- link a6,#-$3E ;*/modify LINK A6,#-$3A
- LEA $1E(A1),A4
- MOVE.W (A3)+,D1
- L0210E PEA $02(A3)
- ADDA.W (A3),A3
- BSR RI_A1_EXecb
- MOVEA.L (A7)+,A3
- PEA $02(A3)
- ADDA.W (A3),A3
- JSR (A3)
- MOVEA.L (A7)+,A3
- DBF D1,L0210E
- UNLK A6
- MOVEM.L (A7)+,D1-D7/A0/A2/A4-A6
- MOVEM.L (A7)+,A3/A5
- MOVEQ #0,D0
- RTS
- ; ----------------------------------------------
- L02136 ; called from SD_LINE and SD_ARC and SD_ELLIPs
- MOVEM.L D0-D1/A3,-(A7)
- TST.L D2
- BEQ L021C4
- MOVE.L D2,-$10(A6)
- MOVEQ #-1,D3
- move.l (a6),a3 ;*/modify
- btst #3,SV_MCSTA(a3) ;*/modify BTST #3,$28034
- BEQ.S L02158
- ADD.L D2,D2
- LSL.L #1,D3
- ADDQ.W #1,-$30(A4)
- L02158 MOVE.W D3,-$22(A6)
- NEG.L D2
- MOVE.L D2,-4(A6)
- MOVE.L D2,-12(A6)
- CLR.L -8(A6)
- BSR L020D8
- MOVEQ #$10,D0 ; RI.DIV
- BSR RI_EXEC_a1
- BSR.S L021DC
- LEA L02218(PC),A3
- BSR RI_A1_EXecb
- BSR.S L021CA
- MOVE.L D1,D2
- BSR.S L021CA
- MOVE.L D1,D3
- BSR.S L021CA
- MOVE.L D1,D4
- BSR.S L021CA
- MOVE.L D1,D6
- BSR.S L021CA
- MOVE.L D1,D7
- LEA -$60(A4),A1
- BSR.S L021D6
- MOVEA.W (A1)+,A5
- LEA -$18(A4),A1
- BSR.S L021D2
- MOVE.L (A1)+,-$18(A6)
- BSR.S L021D2
- MOVE.L (A1)+,D1
- AND.W -$22(A6),D1
- MOVE.L D1,-$14(A6)
- BSR.S L021D2
- MOVE.L (A1)+,D1
- BSR.S L021D2
- MOVE.L (A1)+,D0
- AND.W -$22(A6),D0
- BSR L02252 ; QQQQQQQQQQQQQQQQQQQQQQQ
- BSR L022CA
- L021C4 MOVEM.L (A7)+,D0-D1/A3
- RTS
- L021CA ADDQ.W #4,(A1)
- BSR.S L021D2
- MOVE.L (A1)+,D1
- RTS
- L021D2 MOVEQ #6,D0 ; RI_NLINT
- BRA.S L021D8
- L021D6 MOVEQ #2,D0 ; RI_NINT
- L021D8 JMP RI_EXEC_a1(PC) ;*/undomodify BRA RI_EXEC_a1
- L021DC MOVE.L $52(A0),-(A1) ; graphics window origin
- ; (float)
- MOVE.L $4E(A0),-(A1) ; continues ...
- MOVE.L $4A(A0),-(A1) ; up to here
- RTS
- ; table to calculate convex. of arc & ellipse
- ARC_TB3:
- DC.W $949A,$0C82,$0E8E,$0E8E,$160E,$169A,$0E82,$160E
- DC.W $169A,$0E70,$940E,$0A71,$940E,$0A16,$7C0E,$7688
- DC.W $0E0A,$1470,$880E,$767C,$0E0A,$837D,$0000
- L02218 DC.B $64,$0E,$14,$16,$F4,$0A,$F5,$E8,$0A,$E9,$0E,$14
- DC.B $16,$FA,$0A,$AC
- L02228 DC.B $0E,$FB,$EE,$0A,$AC,$0E,$EF,$D0
- DC.B $AC,$10,$16,$76,$0E,$77,$16,$82,$0E,$83,$16,$0E
- DC.B $70,$0E,$71,$00
- L02240 DC.W $0801 ; 1.355 (Compression factor
- ; in X direction)
- L02242 DC.L $56B851EC
- L02246 DC.W $07F7 ; 0.001
- DC.L $4189374C
- L0224C DC.W $0802 ; PI
- L0224E DC.L $6487ED51
- L02252 CMPA.L #-1,A5
- BEQ.S L02264
- TST.L D2
- BEQ.S L022C0
- TST.L D3
- BEQ.S L022C0
- BRA.S L02266
- L02264:
- SUBA.L A5,A5
- L02266:
- MOVEA.L D3,A1
- MOVEA.L D4,A2
- ADDA.L A1,A2
- MOVEA.L D2,A3
- ADDA.L D4,A3
- ADDA.L A2,A3
- ADD.L D4,D3
- NEG.L D3
- ASR.L #1,D3
- ADD.L D7,D3
- MOVE.L D6,D4
- SUB.L D3,D4
- ASR.L #2,D2
- NEG.L D2
- SUB.L D6,D2
- ASR.L #1,D2
- ADD.L D3,D2
- MOVE.L A5,-(A7)
- MOVE.L D2,-(A7)
- MOVE.L D3,D7
- MOVE.L D4,D6
- JSR GET_PIXEladr_rel(PC);*/undomodify BSR GET_PIXEladr_rel
- MOVEA.L (A7)+,A0
- MOVEA.W #8,A4 ;*/undomend MOVEA.L
- ;*/note #8 sign extended long
- MOVE.B #$FF,-$24(A6)
- L022A0:
- TST.L D7
- BLT.S L022A8
- TST.L D6
- BGE.S L022C6
- L022A8 TST.B -$24(A6)
- BGE.S L022B4
- BSR L0238A
- BRA.S L022B8
- L022B4 BSR L023D0
- L022B8 CMPA.W #0,A4
- BGT.S L022A0
- ADDQ.L #4,A7
- L022C0 ADDQ.L #4,A7
- JMP L021C4(PC) ;*/undomodify BRA L021C4
- L022C6 MOVEA.L (A7)+,A4
- RTS
- L022CA:
- move.l a0,-(a7) ;*/insertcode
- move.l -$3E(a6),a0 ;*/insertcode
- BSR L0248A
- move.l (a7)+,a0 ;*/insertcode
- BSR.S L02330
- MOVE.L A0,D4
- BGE.S L022E4
- movem.l -8(a6),d4-d5 ;*/modify MOVE.L -4(A6),D4
- ;*/modify MOVE.L -8(A6),D5
- SUB.L A1,D7
- ADD.L A2,D6
- ADDA.L D7,A0
- BRA.S L022F2
- L022E4 movem.l -$10(a6),d4-d5 ;*/modify MOVE.L -$0C(A6),D4
- ;*/modify MOVE.L -$10(A6),D5
- SUB.L A2,D7
- ADD.L A3,D6
- SUBA.L D6,A0
- L022F2 add.l d5,d0 ;*/modify ADD.L D4,D0
- add.l d4,d1 ;*/modify ADD.L D5,D1
- tst.l d4 ;*/modify TST.L D5
- BGE.S L02302
- lea $80(a5),a5 ;*/modify ADDA.L #$80,A5
- BRA.S L0230A
- L02302 BEQ.S L0230C
- lea -$80(a5),a5 ;*/modify SUBA.L #$80,A5
- L0230A SWAP D3
- L0230C moveq #1,d4 ;*/modify MOVEQ #1,D5
- move.l a3,-(a7) ;*/insert
- move.l (a6),a3 ;*/modify
- btst #3,SV_MCSTA(a3) ;*/modify BTST #3,$28034
- move.l (a7)+,a3 ;*/insert
- BEQ.S L0231A
- moveq #2,d4 ;*/modify MOVEQ #2,D5
- L0231A tst.l d5 ;*/modify TST.L D4
- BGE.S L02326
- rol.w d4,d2 ;*/modify ROL.W D5,D2
- BCC.S L0232E
- SUBQ.L #2,A5
- BRA.S L0232E
- L02326 BEQ.S L0232E
- ror.w d4,d2 ;*/modify ROR.W D5,D2
- BCC.S L0232E
- ADDQ.L #2,A5
- L0232E BRA.S L022CA
- L02330 MOVE.W A4,D4
- BLT.S L02386
- SUBQ.W #2,D4
- BGT.S L02360
- MOVE.L D1,D4
- SUB.L -$18(A6),D4
- BGE.S L02342
- NEG.L D4
- L02342 SUBQ.L #1,D4
- BGT.S L02360
- MOVE.L D0,D4
- SUB.L -$14(A6),D4
- BGE.S L02350
- NEG.L D4
- L02350:
- exg d5,a3 ;*/insert
- move.l (a6),a3 ;*/modify
- btst #3,SV_MCSTA(a3) ;*/modify BTST #3,$28034
- exg d5,a3 ;*/insert
- BEQ.S L0235C
- SUBQ.L #1,D4
- L0235C SUBQ.L #1,D4
- BLE.S L02386
- L02360 TST.L D7
- BNE.S L02368
- TST.L D6
- BEQ.S L02386
- L02368:
- BGE.S L02376
- TST.B -$24(A6)
- BGT.S L02376
- BSR.L L0238A ;*/undomodify BSR.S L0238A
- ;*/undomodify nop
- BRA.S L02330
- L02376:
- TST.L D6
- BGE.S L02388
- TST.B -$24(A6)
- BLT.S L02388
- BSR.L L023D0 ;*/undomodify BSR.S L023D0
- ;*/undomodify nop
- BRA.S L02330
- L02386:
- ADDQ.L #4,A7
- L02388:
- RTS
- L0238A TST.L -$04(A6)
- BNE.S L02394
- NEG.L -$0C(A6)
- L02394 TST.L -$08(A6)
- BNE.S L0239E
- NEG.L -$10(A6)
- L0239E MOVE.L A1,D4
- NEG.L D4
- MOVEA.L D4,A1
- ADD.L A2,D4
- MOVEA.L D4,A2
- ADDA.L A1,A2
- MOVE.L D4,D5
- LSL.L #2,D5
- SUB.L A3,D5
- MOVEA.L D5,A3
- NEG.L D7
- SUB.L D4,D7
- MOVE.L A0,D5
- NEG.L D5
- SUB.L D6,D5
- ADD.L D7,D5
- MOVEA.L D5,A0
- SUB.L D7,D6
- SUB.L D7,D6
- SUB.L D4,D6
- SUBQ.L #1,A4
- MOVE.B #1,-$24(A6)
- RTS
- L023D0 TST.L -8(A6)
- BNE.S L023E2
- CLR.L -4(A6)
- MOVE.L -16(A6),-8(A6)
- BRA.S L023F2
- L023E2 TST.L -4(A6)
- BNE.S L023F2
- CLR.L -8(A6)
- MOVE.L -$0C(A6),-4(A6)
- L023F2 MOVE.L A2,D4
- LSL.L #1,D4
- SUB.L A3,D4
- MOVE.L D4,D5
- SUB.L A1,D5
- MOVEA.L D5,A1
- SUBA.L A3,A2
- MOVE.L A3,D5
- NEG.L D5
- MOVEA.L D5,A3
- MOVE.L A2,D5
- ASR.L #1,D5
- NEG.L D5
- ADD.L D6,D5
- ADD.L D5,D7
- MOVE.L D6,D5
- ASR.L #1,D5
- NEG.L D5
- SUB.L A0,D5
- ADD.L D7,D5
- MOVEA.L D5,A0
- MOVE.L A3,D5
- ASR.L #3,D5
- ADDA.L D5,A0
- NEG.L D6
- ASR.L #1,D4
- ADD.L D4,D6
- SUBQ.L #1,A4
- MOVE.B #$FF,-$24(A6)
- RTS
- ; -------------------------------------------------------------
- ; return pixel pattern (D2) and address (A0) relative to window
- ; coordinates.
- ; D0=X D1=Y
- ; -------------------------------------------------------------
- GET_PIXEladr_rel:
- MOVEM.L D0-D1,-(A7)
- CLR.L D2 ; pixel pattern on return
- NEG.L D1 ; x=0,y=0 is in the bottom
- ; left corner
- SUBQ.L #1,D1 ; y=1-512 -> 0-511
- MOVE.W $1E(A0),D2 ; Y-size
- ADD.W $1A(A0),D2 ; y-min (window top)
- ADD.L D2,D1
- MOVE.W $18(A0),D2 ; x-min (window left)
- ADD.L D2,D0 ; reduction possible *?*
- MOVE.L $3E(A0),D3 ; INK colour mask
- BTST #0,D1
- BEQ.S L02458
- SWAP D3
- L02458:
- MOVEQ #0,D2
- MOVE.W #$8080,D2
- move.l (a6),a5 ;*/insertcode
- btst #3,SV_MCSTA(a5) ;*/modify BTST #3,$28034
- BEQ.S L02482
- MOVE.W #$C0C0,D2 ; for 256 mode
- L02482:
- move.l SD_SCRB(a0),a5 ;*/modify MOVEA.L #$20000,A5
- LSL.L #7,D1 ; Y*128
- ADDA.L D1,A5 ; row address
- MOVE.L D0,D1 ; X
- LSR.L #3,D1 ; X byte
- LSL.L #1,D1 ; only even address
- ADDA.L D1,A5 ; word in which the pixel
- ; lies
- ANDI.W #15,D0 ; extract bit
-
- ROR.W D0,D2 ; pixel pattern in D2
- MOVEM.L (A7)+,D0-D1
- RTS
- L0248A CMP.L -$20(A6),D1
- BCC L02546
- TST.B -$32(A6)
- BEQ L0251C
- MOVEM.L D0-D3/A0-A1,-(A7)
- movea.l d1,a1 ;*/modify MOVEA.L D1,A0
- adda.l a1,a1 ;*/modify ADDA.L A0,A0
- adda.l a1,a1 ;*/modify ADDA.L A0,A0
- adda.l #$10,a1 ;*/modify ADDA.L #$10,A0
- adda.l -$2A(a6),a1 ;*/modify ADDA.L -$2A(A6),A0
- move.l (a1),d2 ;*/modify MOVE.L (A0),D2
- BSET #$1F,D0
- move.l d0,(a1) ;*/modify MOVE.L D0,(A0)
- ;*/endoverlay
- LSL.L #1,D0
- ASR.L #1,D0
- LSL.L #1,D2
- BCC.S L02516
- ASR.L #1,D2
- MOVE.L D2,D4
- SUB.L D0,D4
- BGE.S L024C8
- EXG D0,D2
- L024C8 TST.L D0
- BGE.S L024CE
- MOVEQ #0,D0
- L024CE TST.L D2
- BLT.S L02516
- CMP.L -$1C(A6),D0
- BGE.S L02516
- CMP.L -$1C(A6),D2
- BLT.S L024E2
- MOVE.L -$1C(A6),D2
- L024E2 SUB.L D0,D2
- ADD.L -$36(A6),D0
- NEG.L D1
- ADD.L -$3A(A6),D1
- ADD.L -$20(A6),D1
- SUBQ.L #1,D1
- MOVE.W D3,-(A7)
- MOVE.W D3,-(A7)
- SWAP D3
- MOVE.W D3,-(A7)
- MOVE.W D3,-(A7)
- MOVEA.L A7,A1
- MOVEQ #$01,D3
- BTST #$03,-$23(A6)
- BNE.S L02510
- JSR L025BE(PC) ;*/undomodify BSR L025BE
- BRA.S L02514
- L02510 JSR L025CA(PC) ;*/undomodify BSR L025CA
- L02514 ADDQ.L #8,A7
- L02516 MOVEM.L (A7)+,D0-D3/A0-A1
- RTS
- L0251C CMP.L -$1C(A6),D0
- BCC.S L02546
- SWAP D2
- SWAP D3
- MOVE.L D3,D4
- AND.L D2,D4
- BTST #$03,-$23(A6)
- BNE.S L02540
- MOVE.L (A5),D5
- NOT.L D2
- AND.L D2,D5
- NOT.L D2
- OR.L D4,D5
- MOVE.L D5,(A5)
- BRA.S L02542
- L02540 EOR.L D4,(A5)
- L02542 SWAP D2
- SWAP D3
- L02546 RTS
- ; ------------------------------------------------------------
- L02548:
- MOVEM.L D0-D7/A0-A6,-(A7)
- BSR.S L0256A
- MOVE.L #$FF00FF,D6
- MOVE.L D6,D7
- BRA.S L025D0
- L02558 MOVE.L (A1),D6
- MOVE.W D6,D7
- SWAP D7
- MOVE.W D6,D7
- MOVE.W (A1),D6
- BTST #0,D1
- BNE.S L0256A
- EXG D6,D7
- L0256A LSL.W #7,D1 ; Y*128
- move.l SD_SCRB(a0),a1 ;*/modify MOVEA.L #$20000,A1
- nop ;*/modify
- ADDA.W D1,A1 ; Row address
- LSL.W #6,D3
- MOVEA.W D3,A2
- ADDA.L A2,A2
- MOVE.W D0,D1
- LSR.W #4,D1
- LSL.W #2,D1
- ADDA.W D1,A1
- ADDA.L A1,A2
- MOVEA.W #128,A3
- LSR.W #2,D1
- ADD.W D0,D2
- MOVE.W D2,D3
- SUBQ.W #1,D3
- ASR.W #4,D3
- SUB.W D1,D3
- MOVEA.W D3,A5
- ADDA.W A5,A5
- ADDA.W A5,A5
- BSR.S L025AA
- MOVE.L D5,D4
- MOVE.W D2,D0
- BSR.S L025AA
- NOT.L D5
- BNE.S L025A8
- MOVEQ #-1,D5
- L025A8 RTS
- L025AA MOVEQ #-1,D5
- ANDI.W #15,D0
- LSR.W D0,D5
- MOVE.W D5,D0
- LSL.L #8,D5
- MOVE.W D0,D5
- LSL.L #8,D5
- MOVE.B D0,D5
- RTS
- ; ----------------------------------------------------------
- L025BE MOVEM.L D0-D7/A0-A6,-(A7)
- BSR.S L02558
- L025C4 LEA L026EC(PC),A6
- BRA.S L025F4
- L025CA MOVEM.L D0-D7/A0-A6,-(A7)
- BSR.S L02558
- L025D0 LEA L026F4(PC),A6
- BRA.S L025F4
- L025D6 MOVEM.L D0-D7/A0-A6,-(A7)
- MOVEA.L A1,A4
- BSR.S L0256A
- ADD.W D3,D3
- ADDQ.W #1,D3
- bsr.l MDTSTFIX ;*/modify BTST #3,$34(A6)
- nop ;*/modify
- BNE.S L025F0
- LEA L0273E(PC),A6
- BRA.S L025F4
- L025F0 LEA L02708(PC),A6
- L025F4 BSR L026E6
- MOVEM.L (A7)+,D0-D7/A0-A6
- RTS
- ; -------------------------------------------------------------
- L025FE MOVEM.L D0-D7/A0-A6,-(A7)
- BSR L02558
- MOVE.W $12(A7),D2
- NEG.W D2
- LSL.W #7,D2
- BVS.S L025C4
- BGT.S L02630
- EXG A2,A1
- MOVEA.W #$FF80,A3
- ADDA.L A3,A1
- ADDA.L A3,A2
- MOVE.W A1,D0
- SUB.W A2,D0
- TST.B D0
- BNE.S L02626
- EXG D6,D7
- L02626 LEA 0(A1,D2.W),A4
- CMPA.L A2,A4
- BLS.S L025C4
- BRA.S L02638
- L02630 LEA 0(A1,D2.W),A4
- CMPA.L A4,A2
- BLS.S L025C4
- L02638 LEA L026FC(PC),A6
- SUBA.W D2,A2
- BSR L026E6
- ADDA.W D2,A2
- BRA L025C4
- L02648 MOVEM.L D0-D7/A0-A6,-(A7)
- BSR L02558
- SWAP D3
- MOVE.W $12(A7),D2
- NEG.W D2
- BGT.S L0268A
- NEG.W D2
- MOVE.W D2,D3
- ANDI.W #$0F,D3
- ADDI.W #$10,D3
- SWAP D3
- LSR.W #4,D2
- CMP.W D3,D2
- BHI L025C4
- SUB.W D2,D3
- MOVEA.W #$FFFC,A0
- ADDA.W A5,A1
- ADDA.W A5,A2
- MOVEA.L A1,A4
- LSL.W #2,D2
- SUBA.W D2,A4
- MOVE.L A5,D2
- NEG.L D2
- MOVEA.L D2,A5
- EXG D4,D5
- BRA.S L026AC
- L0268A MOVEA.W #$04,A0
- MOVE.W D2,D3
- ANDI.W #$0F,D3
- NEG.W D3
- ADDI.W #$10,D3
- SWAP D3
- LSR.W #4,D2
- CMP.W D3,D2
- BHI L025C4
- SUB.W D2,D3
- LSL.W #2,D2
- LEA 0(A1,D2.W),A4
- L026AC ADDQ.W #1,D3
- LEA L02770(PC),A6
- BRA L025F4
- L026B6 MOVE.W D3,D0
- BMI.S L026EA
- EXG D6,D7
- MOVE.L (A1),-(A7)
- MOVE.L 0(A1,A5.W),-(A7)
- JMP (A6)
- L026C4 SUBQ.W #4,A1
- L026C6 MOVE.L (A1),D0
- AND.L D5,D0
- MOVE.L D5,D1
- NOT.L D1
- AND.L (A7)+,D1
- OR.L D1,D0
- MOVE.L D0,(A1)
- SUBA.L A5,A1
- MOVE.L (A1),D0
- AND.L D4,D0
- MOVE.L D4,D1
- NOT.L D1
- AND.L (A7)+,D1
- OR.L D1,D0
- MOVE.L D0,(A1)
- ADDA.L A3,A1
- L026E6 CMPA.L A2,A1
- BNE.S L026B6
- L026EA RTS
- L026EC MOVE.L D6,(A1)+
- DBF D0,L026EC
- BRA.S L026C4
- L026F4 EOR.L D6,(A1)+
- DBF D0,L026F4
- BRA.S L026C4
- L026FC LEA 0(A1,D2.W),A4
- L02700 MOVE.L (A4)+,(A1)+
- DBF D0,L02700
- BRA.S L026C4
- L02708 MOVE.B (A1),D6
- MOVE.B 1(A1),D7
- MOVEQ #3,D1
- L02710 MOVEQ #0,D2
- MOVE.B D6,D2
- LSL.B #6,D2
- LSL.W #1,D2
- MOVE.B D7,D2
- LSL.B #6,D2
- LSR.W #6,D2
- MOVE.B 0(A4,D2.W),D2
- ROXR.B #1,D2
- ROXR.B #1,D7
- ROXR.B #1,D2
- ROXR.B #1,D7
- ROR.B #1,D6
- ROXR.B #1,D2
- ROXR.B #1,D6
- DBF D1,L02710
- MOVE.B D6,(A1)+
- MOVE.B D7,(A1)+
- DBF D0,L02708
- BRA.S L026C4
- L0273E MOVE.B (A1),D6
- MOVE.B 1(A1),D7
- MOVEQ #7,D1
- L02746 MOVEQ #0,D2
- MOVE.B D6,D2
- LSL.B #7,D2
- LSL.W #1,D2
- MOVE.B D7,D2
- LSL.B #7,D2
- LSR.W #6,D2
- MOVE.B 0(A4,D2.W),D2
- ROXR.B #2,D2
- ROXR.B #1,D7
- ROXR.B #1,D2
- ROXR.B #1,D6
- DBF D1,L02746
- MOVE.B D6,(A1)+
- MOVE.B D7,(A1)+
- DBF D0,L0273E
- BRA L026C4
- L02770:
- MOVE.W A5,-(A7)
- MOVE.L A4,-(A7)
- MOVE.L D6,-(A7)
- ADDA.L A1,A5
- MOVE.L (A5),D2
- AND.L D5,D2
- MOVE.L D5,D1
- NOT.L D1
- AND.L D6,D1
- OR.L D1,D2
- MOVE.L D2,(A5)
- ADDA.L A0,A5
- SWAP D3
- MOVEP.W 0(A4),D1
- DC.L $050C0001 ;*/note equ MOVEP.W 1(A4),D2
- ;*/note A68k can't handle it
- BRA.S L027B4
- L02794:
- ADDA.L A0,A4
- L02796:
- SWAP D1
- SWAP D2
- MOVEP.W 0(A4),D1
- DC.L $050C0001 ;*/note equ MOVEP.W 1(A4),D2
- ;*/note A68k can't handle it
- MOVE.L D1,D6
- ROR.L D3,D6
- MOVEP.W D6,0(A1)
- MOVE.L D2,D6
- ROR.L D3,D6
- DC.L $0D890001 ;*/note equ MOVEP.W D6,1(A1)
- ;*/note A68k can't handle it
- ADDA.L A0,A1
- L027B4:
- SUBQ.W #1,D0
- BGT.S L02794
- BLT.S L027BE
- MOVEA.L A7,A4
- BRA.S L02796
- L027BE:
- MOVE.L (A7)+,D6
- MOVEA.L (A7)+,A4
- SWAP D3
- BRA.S L027CA
- L027C6:
- MOVE.L D6,(A1)
- ADDA.L A0,A1
- L027CA:
- CMPA.L A1,A5
- BNE.S L027C6
- MOVEA.W (A7)+,A5
- ADDA.L A3,A4
- SUBA.L A0,A1
- BRA L026C6
- L027D8:
- MOVEM.L D1-D2,-(A7)
- BSR.S L0281E
- MOVE.W D2,(A1)
- MOVE.W D2,2(A1)
- LSR.B #3,D1
- BEQ.S L02818
- BSR.S L0281E
- LSR.B #3,D1
- BTST #0,D1
- BEQ.S L027F6
- EOR.W D2,2(A1)
- L027F6:
- CMPI.B #$01,D1
- BEQ.S L02818
- bsr.l MDTSTFIX ;*/modify BTST #3,$34(A6)
- nop ;*/modify
- BEQ.S L0280A
- ANDI.W #$3333,D2 ; colour bits
- BRA.S L0280E
- L0280A:
- ANDI.W #$5555,D2 ; colour bits
- L0280E:
- EOR.W D2,(A1)
- TST.B D1
- BEQ.S L02818
- EOR.W D2,2(A1)
- L02818:
- MOVEM.L (A7)+,D1-D2
- RTS
- ; ------------------------------------------------------
- L0281E MOVE.B D1,D2
- ANDI.W #7,D2
- ROR.L #2,D2
- LSL.W #7,D2
- ROL.L #2,D2
- bsr.l MDTSTFIX ;*/modify BTST #3,$34(A6)
- nop ;*/modify
- BEQ.S L02838
- MULU #85,D2
- BRA.S L0283E
- L02838 LSR.W #1,D2
- MULU #$FF,D2
- L0283E RTS
- OUT_CHAR ; Write character (D2) with font (A2) at D0,D1
- MOVEM.L D0-D7/A0-A6,-(A7)
- MOVEM.L (A1),D6-D7 ; D7= ink mask
- BTST #0,D1 ; odd address
- BNE.S L02852
- SWAP D6 ; invert mask
- SWAP D7
- L02852 ANDI.W #$FF,D2 ; character to print
- MOVEA.L A2,A4 ; pointer to first character
- ; font
- SUB.B (A4)+,D2 ; higher ?
- CMP.B (A4)+,D2
- BLS.S L0286A ; no
- ADD.B (A2),D2
- MOVEA.L A3,A4 ; second character font
- SUB.B (A4)+,D2
- CMP.B (A4)+,D2
- BLS.S L0286A ; ok
- MOVEQ #0,D2 ; character not printable
- ; character pixel plot : D0=X,D1=Y
- L0286A ADDA.W D2,A4 ; get value in charlist
- LSL.W #3,D2
- ADDA.W D2,A4
- move.l SD_SCRB(a0),a1 ;*/modify MOVEA.L #$20000,A1
- nop ;*/modify ; screen start
- LSL.W #7,D1 ; Y*128
- ADDA.W D1,A1 ; Y address
- MOVE.W D0,D1 ; X -> D1
- LSR.W #3,D0 ; extract byte in X -
- ; Direction
- ADD.W D0,D0 ; only even address
- ADDA.W D0,A1 ; address of byte
- ANDI.W #7,D1 ; extract Bits to be set
- MOVEA.W #$FFFF,A5
- BTST #0,D3 ; underline bit ?
- BEQ.S L02892 ; no
- ADDQ.W #2,A5 ;*/undomend ADDQ.L #2,A5
- L02892 MOVEQ #0,D0
- MOVEQ #$7E,D2
- ADD.W D2,D2 ; D2= $FC
- MOVEQ #0,D5
- BTST #6,D3 ; double width ?
- BEQ.S L028B4
- MOVEQ #-1,D0
- MOVE.W #$FFF0,D2
- ADDQ.W #8,D1 ; bits to be set
- BTST #1,D3 ; flash ?
- BEQ.S L028B4
- MOVE.W #$4010,D5
- ROR.L D1,D5 ; bits to be set
- L028B4 BTST #5,D3 ; extendet width ?
- BEQ.S L028BC
- ASR.B #4,D2
- L028BC MOVEQ #0,D4
- BTST #4,D3 ; double height bit
- BEQ.S L028C6
- MOVEQ #-1,D4
- L028C6 ROR.L D1,D2
- lea L02924(pc),a3 ;*/modify LEA L02924(PC),A6
- ; pixel plot mode (PAPER
- ; background)
- BTST #2,D3 ; transparent background ?
- BEQ.S L028E0
- lea L0293A(pc),a3 ;*/modify LEA L0293A(PC),A6
- ; pixel exor mode (now
- BTST #3,D3 ; XOR character ?
- BEQ.S L028E0
- lea L02936(pc),a3 ;*/modify LEA L02936(PC),A6
- ; pixel set mode
- ; (transparent background)
- L028E0 MOVEA.L A1,A2 ; address on screen
- MOVE.B D2,D0 ; copy byte to print in long
- ; word
- LSL.W #8,D2
- MOVE.B D0,D2
- LSL.W #8,D5
- MOVE.W #9,D0 ; number of pixel rows per
- ; character
- MOVEQ #0,D3
- BRA.S L0291C ; address to odd mask
- L028F2 MOVEQ #0,D3
- CMP.W A5,D0 ; underline ?
- BNE.S L028FE
- MOVEQ #-1,D3
- ADDQ.W #1,A4 ;*/undomend ADDQ.L #1,A4
- BRA.S L02914
- L028FE MOVE.B (A4)+,D3 ; char-matrix in D3
- BEQ.S L0291C
- TST.L D0 ; 6 or 8 pixel size
- BGE.S L0290C
- LSR.B #1,D3
- MOVE.W CVT_6_12(PC,D3.W),D3 ; convert-table 6*9 to
- ; 12*9
- L0290C ROR.W D1,D3 ; Calculate any pixel
- ; depending on size
- MOVE.B D3,D4 ; and char matrix
- LSL.W #8,D3
- MOVE.B D4,D3
- L02914 AND.W D2,D3
- MOVE.W D3,D4
- SWAP D3
- MOVE.W D4,D3 ; AND pattern in D3
- L0291C MOVE.W D3,D4
- AND.W D7,D4
- OR.W D5,D4 ; pixel bits in D4
- jmp (a3) ;*/modify JMP (A6)
- ; 293A/2936/2924
- ; pixel plot mode
- L02924 EOR.W D2,D3
- AND.W D6,D3
- OR.W D4,D3
- MOVE.W D2,D4
- NOT.W D4
- AND.W (A1),D4 ; keep old pixels
- OR.W D3,D4 ; insert new ones
- MOVE.W D4,(A1) ; set pixel
- BRA.S L02942
- ; pixel eor mode
- L02936 EOR.W D4,(A1) ; exor pixel
- BRA.S L02942
- L0293A NOT.W D3
- ; pixel set mode
- AND.W (A1),D3 ; keep old pixels
- OR.W D4,D3 ; insert new ones
- MOVE.W D3,(A1) ; set pixel
- L02942 SWAP D6
- SWAP D7
- ADDA.W #$80,A1
- TST.L D4 ; normal size
- BGE.S L02956 ; yes
- SWAP D3 ; get other part of
- ; character
- BCHG #30,D4
- BNE.S L0291C ; plot other part
- L02956 DBF D0,L028F2 ; next pixel row for
- ; character
- CLR.W D2
- ROL.L #8,D2
- BEQ.S L02976 ; character written -> end
- CLR.W D5
- ROL.L #8,D5
- SUBQ.B #8,D1
- ANDI.B #15,D1
- MOVEA.L A2,A1
- ADDQ.W #2,A1 ;*/undomend ADDQ.L #2,A1
- SUBA.W #9,A4
- BRA L028E0 ; double height or double
- ; width ??
- L02976 MOVEM.L (A7)+,D0-D7/A0-A6
- RTS
- ; ******************************************************
- ; * End of graphic subroutines ?? *
- ; ******************************************************
- ; screen-pixel translate code
- ; transfers 6*9 matrix to 12*9matrix
- L0297C:
- CVT_6_12:
- DC.L $00000030,$00C000F0,$03000330,$03C003F0
- DC.L $0C000C30,$0CC00CF0,$0F000F30,$0FC00FF0
- DC.L $30003030,$30C030F0,$33003330,$33C033F0
- DC.L $3C003C30,$3CC03CF0,$3F003F30,$3FC03FF0
- DC.L $C000C030,$C0C0C0F0,$C300C330,$C3C0C3F0
- DC.L $CC00CC30,$CCC0CCF0,$CF00CF30,$CFC0CFF0
- DC.L $F000F030,$F0C0F0F0,$F300F330,$F3C0F3F0
- DC.L $FC00FC30,$FCC0FCF0,$FF00FF30,$FFC0FFF0
- ; --------------------------------------------------------------
- ;*/endfile
-