952 lines
12 KiB
ArmAsm
952 lines
12 KiB
ArmAsm
LST OFF
|
|
***************************
|
|
* *
|
|
* RECTANGLE AND BITMAP *
|
|
* DRAWING ROUTINES *
|
|
* *
|
|
***************************
|
|
*
|
|
* PURE TEMP'S AND PARAM SPACE
|
|
*
|
|
PARAM EQU $00
|
|
TEMP EQU PARAM+7
|
|
XTEMP EQU TEMP+1
|
|
YTEMP EQU XTEMP+1
|
|
*
|
|
* LOCALS FOR BITMAP ROUTINES
|
|
*
|
|
BASE1 EQU $10
|
|
BASE2 EQU BASE1+2
|
|
TEMPBITS EQU BASE2+2
|
|
VERT EQU TEMPBITS+2
|
|
HDIV7 EQU VERT+1
|
|
HMOD7 EQU HDIV7+1
|
|
WIDTH EQU HMOD7+1
|
|
HEIGHT EQU WIDTH+1
|
|
*
|
|
* LOCALS FOR RECTANGLE ROUTINES
|
|
*
|
|
TEMPRECT EQU BASE2
|
|
TOP EQU TEMPRECT+2
|
|
LFTDIV7 EQU TOP+1
|
|
LFTMOD7 EQU LFTDIV7+1
|
|
LEFTEDGE EQU LFTMOD7+1
|
|
LEFTMASK EQU LEFTEDGE+1
|
|
BOTTOM EQU LEFTMASK+1
|
|
RTDIV7 EQU BOTTOM+1
|
|
RTMOD7 EQU RTDIV7+1
|
|
RIGHTEDGE EQU RTMOD7+1
|
|
RIGHTMASK EQU RIGHTEDGE+1
|
|
*
|
|
* LOCALS FOR MOVE ROUTINES
|
|
*
|
|
SBEGIN EQU $10
|
|
SEND EQU SBEGIN+2
|
|
DBEGIN EQU SEND+2
|
|
DEND EQU DBEGIN
|
|
EXTRA EQU DEND+2
|
|
*
|
|
* LOCALS FOR TEXT
|
|
*
|
|
TBASE EQU HEIGHT+1
|
|
*
|
|
* USER INTERFACE LOC'S
|
|
*
|
|
CURSOR EQU $80
|
|
CURSORY EQU CURSOR+2
|
|
CURSORXDIV7 EQU CURSORY+1
|
|
CURSORXMOD7 EQU CURSORXDIV7+1
|
|
CURSORHEIGHT EQU CURSORXMOD7+1
|
|
CURSORWIDTH EQU CURSORHEIGHT+1
|
|
CRSRXACC EQU CURSORWIDTH+1
|
|
CRSRYACC EQU CRSRXACC+1
|
|
NEWCURSORXDIV7 EQU CRSRYACC+1
|
|
NEWCURSORXMOD7 EQU NEWCURSORXDIV7+1
|
|
NEWCURSORY EQU NEWCURSORXMOD7+1
|
|
CRSRRTSTOP EQU NEWCURSORY+1
|
|
NEWITEM EQU CRSRRTSTOP+1
|
|
LASTITEM EQU NEWITEM+2
|
|
*
|
|
* BITMAP TABLES
|
|
*
|
|
SHFRSLT EQU $800
|
|
SHFOUT EQU SHFRSLT+$600
|
|
DIV7 EQU SHFOUT+$600
|
|
MOD7 EQU DIV7+$100
|
|
LO EQU MOD7+$100
|
|
HI EQU LO+$C0
|
|
*
|
|
ORG HI+$C0
|
|
*
|
|
* DRAW BITMAPS AND ICONS
|
|
*
|
|
GETBITS STA TEMPBITS
|
|
STX TEMPBITS+1
|
|
LDY #0
|
|
LDA (TEMPBITS),Y
|
|
STA BASE2
|
|
STA BITMAP
|
|
INY
|
|
LDA (TEMPBITS),Y
|
|
STA BASE2+1
|
|
STA BITMAP+1
|
|
INY
|
|
LDA (TEMPBITS),Y
|
|
STA VERT
|
|
INY
|
|
LDA (TEMPBITS),Y
|
|
STA HDIV7
|
|
INY
|
|
LDA (TEMPBITS),Y
|
|
STA HMOD7
|
|
INY
|
|
LDA (TEMPBITS),Y
|
|
STA HEIGHT
|
|
INY
|
|
LDA (TEMPBITS),Y
|
|
SEC
|
|
SBC #1
|
|
STA WIDTH
|
|
RTS
|
|
*
|
|
* PEN MODE ROUTINES
|
|
*
|
|
STORE LDA (BASE2),Y
|
|
STA (BASE1),Y
|
|
DEY
|
|
BPL STORE
|
|
BMI DRAWBTS3
|
|
*
|
|
GRAB LDA (BASE1),Y
|
|
STA (BASE2),Y
|
|
DEY
|
|
BPL GRAB
|
|
BMI DRAWBTS3
|
|
*
|
|
XOR LDA (BASE2),Y
|
|
EOR (BASE1),Y
|
|
STA (BASE1),Y
|
|
DEY
|
|
BPL XOR
|
|
BMI DRAWBTS3
|
|
*
|
|
CLR EQU XOR
|
|
OR EQU XOR
|
|
*
|
|
* SET GRAPHICS MODE
|
|
*
|
|
SETMODE LDA PTBL1,Y ;Y=PEN MODE
|
|
STA PMPATCH1 ;MAKE ALL PATCHES
|
|
LDA PTBL2,Y
|
|
STA PMPATCH2
|
|
LDA PTBL3,Y
|
|
STA PMPATCH3
|
|
STA PMPATCH4
|
|
RTS
|
|
*
|
|
PTBL1 DA <STORE
|
|
DA <GRAB
|
|
DA <XOR
|
|
DA <CLR
|
|
DA <OR
|
|
*
|
|
PTBL2 DA <STORE2
|
|
DA <GRAB2
|
|
DA <XOR2
|
|
DA <CLR2
|
|
DA <OR2
|
|
*
|
|
PTBL3 DA <STORE3
|
|
DA <GRAB3
|
|
DA <XOR3
|
|
DA <CLR3
|
|
DA <OR3
|
|
*
|
|
DRAWBITS JSR GETBITS
|
|
DRAWBTS2 LDY VERT ;GET BASE ADDRESS
|
|
CPY #192
|
|
BCS BITSOUT
|
|
LDA LO,Y
|
|
CLC
|
|
ADC HDIV7
|
|
STA BASE1
|
|
LDA HI,Y
|
|
STA BASE1+1
|
|
*
|
|
LDY WIDTH ;BLAST OUT A SCAN LINE
|
|
PMPATCH1 EQU *+1
|
|
JMP STORE ;OFF TO APPROPRIATE MODE
|
|
*
|
|
DRAWBTS3 DEC HEIGHT
|
|
BEQ BITSOUT ;ANY MORE?
|
|
*
|
|
LDA BASE2 ;NEXT ROW IN BITMAP
|
|
SEC
|
|
ADC WIDTH ;WIDTH - 1
|
|
STA BASE2
|
|
LDA BASE2+1
|
|
ADC #0
|
|
STA BASE2+1
|
|
INC VERT
|
|
BNE DRAWBTS2
|
|
BITSOUT RTS
|
|
*
|
|
* BITMAP DRAWING OFFSET BY
|
|
* A NUMBER MOD 7
|
|
*
|
|
SRADDR DA >SHFRSLT
|
|
DA >SHFRSLT+$100
|
|
DA >SHFRSLT+$200
|
|
DA >SHFRSLT+$300
|
|
DA >SHFRSLT+$400
|
|
DA >SHFRSLT+$500
|
|
*
|
|
SOADDR DA >SHFOUT
|
|
DA >SHFOUT+$100
|
|
DA >SHFOUT+$200
|
|
DA >SHFOUT+$300
|
|
DA >SHFOUT+$400
|
|
DA >SHFOUT+$500
|
|
*
|
|
XOFFDRAW JSR GETBITS
|
|
LDY HMOD7 ;BYTE ALIGNED?
|
|
BEQ DRAWBTS2 ;YES, SPECIAL CASE
|
|
LDA SRADDR-1,Y ;POKE IN SHIFT RESULT,
|
|
STA SHIFTRESULT ;SHIFT OUT TABLE ADDRESSES
|
|
LDA SOADDR-1,Y
|
|
STA SHIFTOUT
|
|
*
|
|
XOFFDRW2 LDY VERT ;GET BASE
|
|
CPY #192
|
|
BCS BITSOUT
|
|
LDA LO,Y
|
|
SEC
|
|
ADC HDIV7 ;ADD BYTE OFFSET + 1
|
|
STA BASE1
|
|
LDA HI,Y
|
|
STA BASE1+1
|
|
*
|
|
LDY WIDTH ;DO A SCAN LINE
|
|
LDA #0 ;BOUNDARY SHIFT RESULT
|
|
BITMAP EQU *+1
|
|
XOFFDRW3 LDX $FFFF,Y ;POKE BITMAP ADDRESS
|
|
SHIFTOUT EQU *+2
|
|
ORA SHFOUT,X ;HI BYTE MODIFIED
|
|
EOR (BASE1),Y
|
|
STA (BASE1),Y
|
|
SHIFTRESULT EQU *+2
|
|
LDA SHFRSLT,X ;HI BYTE MODIFIED
|
|
DEY
|
|
BPL XOFFDRW3
|
|
*
|
|
DEC BASE1+1 ;Y=$FF
|
|
EOR (BASE1),Y
|
|
STA (BASE1),Y
|
|
*
|
|
DEC HEIGHT
|
|
BEQ BITSOUT
|
|
*
|
|
LDA BITMAP
|
|
SEC
|
|
ADC WIDTH
|
|
STA BITMAP
|
|
LDA BITMAP+1
|
|
ADC #0
|
|
STA BITMAP+1
|
|
INC VERT
|
|
BNE XOFFDRW2
|
|
*
|
|
**********************
|
|
* *
|
|
* RECTANGLE ROUTINES *
|
|
* *
|
|
**********************
|
|
*
|
|
GETRECT STA TEMPRECT
|
|
STX TEMPRECT+1
|
|
LDY #0
|
|
LDA (TEMPRECT),Y
|
|
STA TOP
|
|
INY
|
|
LDA (TEMPRECT),Y
|
|
STA LFTDIV7
|
|
INY
|
|
LDA (TEMPRECT),Y
|
|
STA LFTMOD7
|
|
TAX
|
|
LDA MASKS,X
|
|
EOR #$7F
|
|
STA LEFTMASK
|
|
*
|
|
INY
|
|
LDA (TEMPRECT),Y
|
|
CLC
|
|
ADC TOP
|
|
STA BOTTOM
|
|
INY
|
|
INY
|
|
LDA (TEMPRECT),Y
|
|
CLC
|
|
ADC LFTMOD7
|
|
CMP #7
|
|
BCC *+4
|
|
SBC #7
|
|
STA RTMOD7
|
|
TAX
|
|
DEY
|
|
LDA (TEMPRECT),Y
|
|
ADC LFTDIV7
|
|
STA RTDIV7
|
|
LDA MASKS+1,X
|
|
STA RIGHTMASK
|
|
RTS
|
|
*
|
|
* MASK AND EDGE TABLES
|
|
*
|
|
MASKS HEX 00,01,03,07,0F,1F,3F,7F
|
|
EDGES HEX 01,02,04,08,10,20,40
|
|
*
|
|
* HORIZONTAL LINE DRAWING
|
|
*
|
|
HLINE LDA LO,X ;X=SCAN LINE
|
|
STA BASE1
|
|
LDA HI,X
|
|
STA BASE1+1
|
|
*
|
|
LDA LEFTMASK
|
|
LDY LFTDIV7
|
|
CPY RTDIV7 ;RECT IN A BYTE?
|
|
BEQ HLIN2
|
|
*
|
|
PMPATCH2 EQU *+1
|
|
JMP STORE2
|
|
*
|
|
HLIN2 EOR RIGHTMASK
|
|
EOR #$7F
|
|
BCS HLIN4
|
|
*
|
|
HLIN3 LDA RIGHTMASK
|
|
PMPATCH3 EQU *+1
|
|
HLIN4 JMP STORE3
|
|
*
|
|
* VERTICAL LINE DRAWING
|
|
*
|
|
VLINE LDA EDGES,X ;Y=DIV7, X=MOD7
|
|
STA LEFTEDGE
|
|
LDX TOP
|
|
VLIN2 LDA LO,X
|
|
STA BASE1
|
|
LDA HI,X
|
|
STA BASE1+1
|
|
*
|
|
LDA LEFTEDGE
|
|
PMPATCH4 EQU *+1
|
|
JSR STORE3
|
|
*
|
|
VLIN3 INX
|
|
CPX BOTTOM
|
|
BCC VLIN2
|
|
BEQ VLIN2
|
|
RTS
|
|
*
|
|
* PEN MODE HANDLERS FOR RECT'S
|
|
*
|
|
STORE2 EQU *
|
|
GRAB2 EQU *
|
|
*
|
|
XOR2A LDA #$7F
|
|
XOR2 EOR (BASE1),Y
|
|
STA (BASE1),Y
|
|
INY
|
|
CPY RTDIV7
|
|
BCC XOR2A
|
|
BCS HLIN3
|
|
*
|
|
CLR2A LDA #$7F
|
|
CLR2 EOR #$7F
|
|
AND (BASE1),Y
|
|
STA (BASE1),Y
|
|
INY
|
|
CPY RTDIV7
|
|
BCC CLR2A
|
|
BCS HLIN3
|
|
*
|
|
OR2A LDA #$7F
|
|
OR2 ORA (BASE1),Y
|
|
STA (BASE1),Y
|
|
INY
|
|
CPY RTDIV7
|
|
BCC OR2A
|
|
BCS HLIN3
|
|
*
|
|
STORE3 EQU *
|
|
GRAB3 EQU *
|
|
*
|
|
XOR3 EOR (BASE1),Y
|
|
STA (BASE1),Y
|
|
RTS
|
|
*
|
|
CLR3 EOR #$7F
|
|
AND (BASE1),Y
|
|
STA (BASE1),Y
|
|
RTS
|
|
*
|
|
OR3 ORA (BASE1),Y
|
|
STA (BASE1),Y
|
|
RTS
|
|
*
|
|
* FRAME A RECTANGLE
|
|
*
|
|
FRAMERECT JSR GETRECT
|
|
LDX TOP
|
|
JSR HLINE
|
|
LDX BOTTOM
|
|
CPX TOP
|
|
BEQ RECTOUT
|
|
JSR HLINE
|
|
*
|
|
INC TOP
|
|
DEC BOTTOM
|
|
CPX TOP
|
|
BCC RECTOUT
|
|
*
|
|
LDY LFTDIV7
|
|
LDX LFTMOD7
|
|
JSR VLINE
|
|
LDY RTDIV7
|
|
LDX RTMOD7
|
|
JMP VLINE
|
|
RECTOUT RTS
|
|
*
|
|
* DRAW A RECTANGULAR AREA
|
|
*
|
|
DRAWRECT JSR GETRECT
|
|
LDX TOP
|
|
DRAWRCT2 JSR HLINE
|
|
INX
|
|
CPX BOTTOM
|
|
BCC DRAWRCT2
|
|
BEQ DRAWRCT2
|
|
RTS
|
|
*
|
|
* RECTANGLE HIT TEST
|
|
*
|
|
INRECT JSR GETRECT
|
|
INRECT2 LDX PARAM+3
|
|
LDA PARAM+4
|
|
LDY PARAM+5
|
|
CPX LFTDIV7
|
|
BCC INRECT4
|
|
BNE INRECT3
|
|
CMP LFTMOD7
|
|
BCC INRECT4
|
|
INRECT3 CPX RTDIV7
|
|
BCC INRECT5
|
|
BNE INRECT4
|
|
CMP RTMOD7
|
|
BCC INRECT5
|
|
BEQ INRECT5
|
|
INRECT4 CLC ;NOT IN RECTANGLE
|
|
RTS
|
|
INRECT5 CPY TOP
|
|
BCC INRECT4
|
|
CPY BOTTOM
|
|
BCC *+4
|
|
BNE INRECT4
|
|
SEC ;CURSOR IN RECTANGLE
|
|
RTS
|
|
*
|
|
**********************
|
|
* *
|
|
* USER INTERFACE AND *
|
|
* MISC STUFF *
|
|
* *
|
|
**********************
|
|
*
|
|
GETBUTNS LDA $C061
|
|
ORA $C062
|
|
RTS
|
|
*
|
|
INITCRSR JSR GETBITS
|
|
LDA BASE2
|
|
STA CURSOR
|
|
LDA BASE2+1
|
|
STA CURSOR+1
|
|
LDA HEIGHT
|
|
STA CURSORHEIGHT
|
|
LDX WIDTH
|
|
INX
|
|
STX CURSORWIDTH
|
|
LDA #40
|
|
SEC
|
|
SBC CURSORWIDTH
|
|
STA CRSRRTSTOP
|
|
*
|
|
* SPECIAL CASE CURSOR DRAWING
|
|
*
|
|
XDRAWCRSR LDA #<CURSOR
|
|
LDX #>CURSOR
|
|
JMP XOFFDRAW
|
|
*
|
|
UPDATECRSR JSR DOCRSRX
|
|
STX NEWCURSORXDIV7
|
|
STA NEWCURSORXMOD7
|
|
JSR DOCRSRY
|
|
STA NEWCURSORY
|
|
JSR XDRAWCRSR ;ERASE OLD ONE
|
|
LDA NEWCURSORXDIV7
|
|
STA CURSORXDIV7
|
|
LDA NEWCURSORXMOD7
|
|
STA CURSORXMOD7
|
|
LDA NEWCURSORY
|
|
STA CURSORY
|
|
JMP XDRAWCRSR ;DRAW NEW ONE
|
|
*
|
|
* READ THE PADDLES AND UPDATE
|
|
* THE CURSOR LOCATION
|
|
*
|
|
DOCRSRX LDA #50
|
|
JSR $FCA8
|
|
LDX #0
|
|
JSR $FB1E
|
|
TYA
|
|
CMOD1 EQU *+1
|
|
EOR #$00
|
|
LSR
|
|
LSR
|
|
LSR
|
|
LSR
|
|
TAY
|
|
LDA LOGLO,Y
|
|
CLC
|
|
ADC CRSRXACC
|
|
STA CRSRXACC
|
|
LDX CURSORXDIV7
|
|
LDA LOGHI,Y
|
|
ADC CURSORXMOD7
|
|
BPL DCRSRX3
|
|
*
|
|
CLC
|
|
DCRSRX2 DEX
|
|
ADC #7
|
|
BMI DCRSRX2
|
|
BPL DCRSRX4
|
|
*
|
|
DCRSRX3 CMP #7
|
|
BCC DCRSRX4
|
|
SBC #7
|
|
INX
|
|
BNE DCRSRX3
|
|
*
|
|
DCRSRX4 CPX CRSRRTSTOP
|
|
BCC DCRSRX6
|
|
BEQ DCRSRX5
|
|
BPL DCRSRX5
|
|
LDA #0
|
|
TAX
|
|
RTS
|
|
DCRSRX5 LDA #0
|
|
LDX CRSRRTSTOP
|
|
DCRSRX6 RTS
|
|
*
|
|
GETCURSORX LDA CURSORXDIV7
|
|
CMP #37
|
|
BCS GETC2
|
|
STA YTEMP
|
|
ASL
|
|
ASL
|
|
ASL
|
|
SEC
|
|
SBC YTEMP
|
|
CLC
|
|
ADC CURSORXMOD7
|
|
BCC GETC3
|
|
GETC2 LDA #$FF
|
|
GETC3 RTS
|
|
*
|
|
DOCRSRY LDA #50
|
|
JSR $FCA8
|
|
LDX #1
|
|
JSR $FB1E
|
|
TYA
|
|
CMOD2 EQU *+1
|
|
EOR #$00
|
|
LSR
|
|
LSR
|
|
LSR
|
|
LSR
|
|
TAY
|
|
LDA LOGLO,Y
|
|
CLC
|
|
ADC CRSRYACC
|
|
STA CRSRYACC
|
|
LDA LOGHI,Y
|
|
ADC CURSORY
|
|
CMP #192
|
|
BCC DCRSRY3
|
|
CMP #224
|
|
BCC DCRSRY2
|
|
LDA #0
|
|
RTS
|
|
DCRSRY2 LDA #191
|
|
DCRSRY3 RTS
|
|
*
|
|
LOGLO HEX 00,00,80,00,80,E0,00,00
|
|
HEX 00,00,20,80,00,80,00,00
|
|
LOGHI HEX FB,FE,FE,FF,FF,FF,00,00
|
|
HEX 00,00,00,00,01,01,02,05
|
|
*
|
|
JSCTRL LDX $C000
|
|
BPL JSC3
|
|
STX $C010
|
|
CPX #$D8
|
|
BNE JSC2
|
|
LDA CMOD1
|
|
EOR #$FF
|
|
STA CMOD1
|
|
JSC2 CPX #$D9
|
|
BNE JSC3
|
|
LDA CMOD2
|
|
EOR #$FF
|
|
STA CMOD2
|
|
JSC3 RTS
|
|
*
|
|
* CURSOR IN RECTANGLE TEST
|
|
*
|
|
CRSRINRECT LDY CURSORXDIV7 ;KEEP A,X
|
|
STY PARAM+3
|
|
LDY CURSORXMOD7
|
|
STY PARAM+4
|
|
LDY CURSORY
|
|
STY PARAM+5
|
|
STA NEWITEM
|
|
STX NEWITEM+1
|
|
JMP INRECT
|
|
*
|
|
* MENU SELECTION UTILITY
|
|
*
|
|
DOMENU STA PARAM
|
|
STX PARAM+1
|
|
*
|
|
DOMNU2 LDY #0
|
|
DOMNU3 LDA (PARAM),Y
|
|
BNE DOMNU5
|
|
*
|
|
LDX LASTITEM+1 ;END OF LIST
|
|
BEQ DOMNU4
|
|
LDA LASTITEM
|
|
JSR DRAWRECT ;PENMODE=XOR
|
|
LDA #0
|
|
STA LASTITEM+1
|
|
DOMNU4 JSR UPDATECRSR
|
|
JSR GETBUTNS
|
|
BMI DOMNU2
|
|
LDX LASTITEM+1
|
|
BNE *+3
|
|
RTS
|
|
LDA LASTITEM
|
|
JMP DRAWRECT
|
|
*
|
|
DOMNU5 STY YTEMP ;GET RECTANGLE
|
|
PHA
|
|
INY
|
|
LDA (PARAM),Y
|
|
TAX
|
|
PLA
|
|
*
|
|
JSR CRSRINRECT ;CURSOR IN IT?
|
|
BCC DOMNU7
|
|
JSR SELECT
|
|
LDY YTEMP
|
|
BCC DOMNU3
|
|
*
|
|
INY
|
|
INY
|
|
LDA (PARAM),Y ;JUMP TO SELECTION
|
|
STA DOMNU6+1
|
|
INY
|
|
LDA (PARAM),Y
|
|
STA DOMNU6+2
|
|
DOMNU6 JMP $FFFF
|
|
*
|
|
DOMNU7 LDA YTEMP ;NEXT MENU ITEM
|
|
ADC #4
|
|
TAY
|
|
BNE DOMNU3
|
|
*
|
|
SELECT LDA LASTITEM+1 ;NO SELECTION?
|
|
BEQ SELECT3
|
|
CMP NEWITEM+1 ;SAME AS NEW ONE?
|
|
BNE SELECT2
|
|
LDA LASTITEM
|
|
CMP NEWITEM
|
|
BEQ SELECT4
|
|
*
|
|
SELECT2 JSR DRAWRECT+3 ;NO, TURN NEW ONE ON
|
|
LDA LASTITEM
|
|
LDX LASTITEM+1
|
|
LDY NEWITEM
|
|
STY LASTITEM
|
|
LDY NEWITEM+1
|
|
STY LASTITEM+1
|
|
JSR DRAWRECT ;TURN OLD ONE OFF
|
|
JMP SELECT4
|
|
*
|
|
SELECT3 JSR DRAWRECT+3 ;TURN ON NEW ONE
|
|
LDA NEWITEM
|
|
STA LASTITEM
|
|
LDA NEWITEM+1
|
|
STA LASTITEM+1
|
|
*
|
|
SELECT4 JSR UPDATECRSR
|
|
*
|
|
JSR GETBUTNS
|
|
CLC
|
|
BMI SELECT5
|
|
LDA LASTITEM
|
|
LDX LASTITEM+1
|
|
JSR DRAWRECT
|
|
SEC
|
|
SELECT5 RTS
|
|
*
|
|
* INIT STUFF
|
|
*
|
|
INIT LDA #$20
|
|
STA BASE1+1
|
|
LDY #0
|
|
STY BASE1
|
|
CLR1A TYA
|
|
CLR1B STA (BASE1),Y
|
|
DEY
|
|
BNE CLR1B
|
|
INC BASE1+1
|
|
LDA BASE1+1
|
|
CMP #$40
|
|
BCC CLR1A
|
|
RTS
|
|
*
|
|
GETPTRS PHA
|
|
LDA $0,X
|
|
STA SBEGIN
|
|
LDA $1,X
|
|
STA SBEGIN+1
|
|
LDA $0,Y
|
|
STA DBEGIN
|
|
LDA $1,Y
|
|
STA DBEGIN+1
|
|
PLA
|
|
TAX
|
|
LDA $0,X
|
|
STA SEND
|
|
LDA $1,X
|
|
STA SEND+1
|
|
RTS
|
|
*
|
|
MOVEUP JSR GETPTRS
|
|
*
|
|
MOVUP2 DEC SEND+1
|
|
DEC DEND+1
|
|
LDA SBEGIN+1
|
|
CMP SEND+1
|
|
BCC MOVUP6
|
|
BNE MOVUP3
|
|
LDA SBEGIN
|
|
CMP SEND
|
|
BCC MOVUP6
|
|
BEQ MOVUP6
|
|
*
|
|
MOVUP3 LDA SBEGIN ;C=1
|
|
SBC SEND
|
|
BEQ MOVUP5
|
|
STA EXTRA
|
|
LDY #$FF
|
|
MOVUP4 LDA (SEND),Y
|
|
STA (DEND),Y
|
|
DEY
|
|
CPY EXTRA
|
|
BCS MOVUP4
|
|
MOVUP5 RTS
|
|
*
|
|
MOVUP6 LDY #$FF
|
|
MOVUP7 LDA (SEND),Y
|
|
STA (DEND),Y
|
|
DEY
|
|
BNE MOVUP7
|
|
LDA (SEND),Y
|
|
STA (DEND),Y
|
|
JMP MOVUP2
|
|
*
|
|
MOVEDOWN JSR GETPTRS
|
|
*
|
|
MOVDN2 LDX SBEGIN+1
|
|
INX
|
|
CPX SEND+1
|
|
BCC MOVDN6
|
|
BNE MOVDN3
|
|
LDA SBEGIN
|
|
CMP SEND
|
|
BCC MOVDN6
|
|
BEQ MOVDN6
|
|
*
|
|
MOVDN3 LDA SEND
|
|
SBC SBEGIN
|
|
BEQ MOVDN5
|
|
STA EXTRA
|
|
LDY #0
|
|
MOVDN4 LDA (SBEGIN),Y
|
|
STA (DBEGIN),Y
|
|
CPY EXTRA
|
|
BEQ MOVDN5
|
|
INY
|
|
BNE MOVDN4
|
|
MOVDN5 RTS
|
|
*
|
|
MOVDN6 LDY #0
|
|
MOVDN7 LDA (SBEGIN),Y
|
|
STA (DBEGIN),Y
|
|
INY
|
|
BNE MOVDN7
|
|
*
|
|
INC SBEGIN+1
|
|
INC DBEGIN+1
|
|
BNE MOVDN2
|
|
*
|
|
ADDIYX CLC
|
|
ADC 0,Y
|
|
STA 0,X
|
|
LDA 1,Y
|
|
ADC #0
|
|
STA 1,X
|
|
RTS
|
|
*
|
|
ADDYX LDA 0,X
|
|
CLC
|
|
ADC 0,Y
|
|
STA 0,X
|
|
LDA 1,X
|
|
ADC 1,Y
|
|
STA 1,X
|
|
RTS
|
|
*
|
|
SUBIYX STA TEMP
|
|
SEC
|
|
LDA 0,Y
|
|
SBC TEMP
|
|
STA 0,X
|
|
LDA 1,Y
|
|
SBC #0
|
|
STA 1,X
|
|
RTS
|
|
*
|
|
SUBYX LDA 0,X
|
|
SEC
|
|
SBC 0,Y
|
|
STA 0,X
|
|
LDA 1,X
|
|
SBC 1,Y
|
|
STA 1,X
|
|
RTS
|
|
*
|
|
CMPYX LDA 1,Y
|
|
CMP 1,X
|
|
BCC CMPYX2
|
|
BNE CMPYX2
|
|
LDA 0,Y
|
|
CMP 0,X
|
|
CMPYX2 RTS
|
|
*
|
|
* MINI-FONT STUFF
|
|
*
|
|
CHARTO STA CHARBITS+4
|
|
STX CHARBITS+3
|
|
STY CHARBITS+2
|
|
RTS
|
|
*
|
|
PRCHAR STA TEMP
|
|
CMP #36
|
|
BEQ SPACE
|
|
ASL
|
|
ASL
|
|
ASL
|
|
SEC
|
|
SBC TEMP ;(A)*7
|
|
CLC
|
|
ADC #<FONT
|
|
STA CHARBITS
|
|
LDA #0
|
|
ADC #>FONT
|
|
STA CHARBITS+1
|
|
LDA #<CHARBITS
|
|
LDX #>CHARBITS
|
|
JSR XOFFDRAW
|
|
SPACE LDY TEMP
|
|
LDA CWIDTH,Y
|
|
SEC
|
|
ADC CHARBITS+4
|
|
PRCHR2 CMP #7
|
|
BCC PRCHR3
|
|
INC CHARBITS+3
|
|
SBC #7
|
|
BCS PRCHR2
|
|
PRCHR3 STA CHARBITS+4
|
|
RTS
|
|
*
|
|
PRINT STA TBASE
|
|
STX TBASE+1
|
|
LDY #0
|
|
PRNT2 LDA (TBASE),Y
|
|
BMI PRNT3
|
|
STY YTEMP
|
|
JSR PRCHAR
|
|
LDY YTEMP
|
|
INY
|
|
BNE PRNT2
|
|
PRNT3 AND #$7F
|
|
JMP PRCHAR
|
|
*
|
|
CHARBITS HEX 00,00
|
|
HEX 00,00,00,07,01
|
|
*
|
|
FONT HEX 0E1B1B1B1B1B0E
|
|
HEX 0607060606060F
|
|
HEX 0E1B180C06031F
|
|
HEX 0E1B180C181B0E
|
|
HEX 1B1B1B1F181818
|
|
HEX 1F030F18181B0E
|
|
HEX 0E1B030F1B1B0E
|
|
HEX 1F180C06060606
|
|
HEX 0E1B1B0E1B1B0E
|
|
HEX 0E1B1B1E181B0E
|
|
HEX 0E1B1B1F1B1B1B
|
|
HEX 0F1B1B0F1B1B0F
|
|
HEX 0E1B0303031B0E
|
|
HEX 0F1B1B1B1B1B0F
|
|
HEX 1F03030F03031F
|
|
HEX 1F03030F030303
|
|
HEX 0E1B031F1B1B0E
|
|
HEX 1B1B1B1F1B1B1B
|
|
HEX 0F06060606060F
|
|
HEX 3C1818181B1B0E
|
|
HEX 331B0F070F1B33
|
|
HEX 0303030303031F
|
|
HEX 777F6B63636363
|
|
HEX 33373B33333333
|
|
HEX 1F1B1B1B1B1B1F
|
|
HEX 0F1B1B0F030303
|
|
HEX 0E1B1B1B1B0E18
|
|
HEX 0F1B1B0F1B1B1B
|
|
HEX 0E1B030E181B0E
|
|
HEX 3F0C0C0C0C0C0C
|
|
HEX 1B1B1B1B1B1B0E
|
|
HEX 1B1B1B1B1B0E04
|
|
HEX 636363636B7F63
|
|
HEX 331E0C0C0C1E33
|
|
HEX 3333331E0C0C0C
|
|
HEX 1F180C0603031F
|
|
*
|
|
CWIDTH HEX 05040505050505050505
|
|
HEX 05050505050505050406060507
|
|
HEX 06050505050506050507060605
|
|
HEX 04
|
|
*
|