1150 lines
15 KiB
ArmAsm
1150 lines
15 KiB
ArmAsm
LST OFF
|
|
*
|
|
* PINBALL CONSTRUCTION KIT
|
|
* PINBALL WIRING KIT
|
|
*
|
|
ORG $9500
|
|
OBJ $7000
|
|
*
|
|
* CONSTANTS
|
|
*
|
|
POLYGON EQU 1
|
|
BPOLYGON EQU 2
|
|
LIBOBJ EQU 3
|
|
*
|
|
* TEMPS
|
|
*
|
|
PARAM EQU $00
|
|
TEMP EQU $07
|
|
XTEMP EQU TEMP+1
|
|
YTEMP EQU XTEMP+1
|
|
TEMP2 EQU YTEMP+1
|
|
*
|
|
* DRAWBITS
|
|
*
|
|
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
|
|
*
|
|
* RECT ROUTINES
|
|
*
|
|
TOP EQU TEMPBITS
|
|
LFTDIV7 EQU TOP+1
|
|
LFTMOD7 EQU LFTDIV7+1
|
|
BOTTOM EQU LFTMOD7+3
|
|
*
|
|
* MAIN PROGRAM
|
|
*
|
|
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
|
|
*
|
|
* OBJECTS
|
|
*
|
|
OBJ EQU LASTITEM+2
|
|
NEXTOBJ EQU OBJ+2
|
|
OBJCOUNT EQU NEXTOBJ+1
|
|
PLYPTRX EQU OBJCOUNT+1
|
|
PLYPTRY EQU PLYPTRX+2
|
|
OBJID EQU PLYPTRY+2
|
|
FILLCOLOR EQU OBJID+1
|
|
VRTXCOUNT EQU FILLCOLOR+1
|
|
LBASE EQU VRTXCOUNT+1
|
|
SCANMODE EQU LBASE+2
|
|
MEMBTM EQU SCANMODE+1
|
|
MIDBTM EQU MEMBTM+2
|
|
MIDTOP EQU MIDBTM+2
|
|
MIDY EQU MIDTOP+2
|
|
*
|
|
* EDITOR
|
|
*
|
|
CURSORX EQU MIDY+1
|
|
EDITMODE EQU CURSORX+1
|
|
SLCTMODE EQU EDITMODE+1
|
|
CUROBJ EQU SLCTMODE+1
|
|
CURNOISE EQU CUROBJ+1
|
|
CURSCORE EQU CURNOISE+1
|
|
BMULT EQU CURSCORE+1
|
|
ETIMER EQU BMULT+1
|
|
SERIES EQU ETIMER+1
|
|
SLICE EQU SERIES+1
|
|
STEMP EQU SLICE+1
|
|
X1 EQU STEMP+1
|
|
Y1 EQU X1+1
|
|
X2 EQU Y1+1
|
|
Y2 EQU X2+1
|
|
MIDX EQU Y2+1
|
|
WIRE EQU MIDX+1
|
|
CONTACTY EQU WIRE+1
|
|
*
|
|
POLYB EQU $C0
|
|
* NEXT EQU $C6
|
|
*
|
|
* PBDB
|
|
*
|
|
LOGIC EQU $4000
|
|
WSET EQU $4018
|
|
PBDATA EQU $401C
|
|
OBJDX EQU PBDATA+1
|
|
PBDX EQU $6F40
|
|
*
|
|
* EXTERNALS
|
|
*
|
|
DIV7 EQU $1400
|
|
MOD7 EQU DIV7+$100
|
|
LO EQU MOD7+$100
|
|
HI EQU LO+$C0
|
|
SETMODE EQU HI+$10F
|
|
DRAWBITS EQU SETMODE+$25
|
|
XOFFDRAW EQU DRAWBITS+$3D
|
|
GETRECT EQU XOFFDRAW+$59
|
|
MASKS EQU GETRECT+$41
|
|
HLINE EQU MASKS+$F
|
|
VLINE EQU HLINE+$20
|
|
FRAMERECT EQU VLINE+$58
|
|
DRAWRECT EQU FRAMERECT+$28
|
|
INRECT EQU DRAWRECT+$10
|
|
GETBUTNS EQU INRECT+$2D
|
|
INITCRSR EQU GETBUTNS+$7
|
|
XDRAWCRSR EQU INITCRSR+$1B
|
|
UPDATECRSR EQU XDRAWCRSR+$7
|
|
DOCRSRX EQU UPDATECRSR+$1E
|
|
GETCURSORX EQU DOCRSRX+$45
|
|
DOCRSRY EQU GETCURSORX+$16
|
|
JSCTRL EQU DOCRSRY+$4D
|
|
CRSRINRECT EQU JSCTRL+$21
|
|
DOMENU EQU CRSRINRECT+$13
|
|
SELECT EQU DOMENU+$54
|
|
INIT EQU SELECT+$40
|
|
MOVEUP EQU INIT+$35
|
|
MOVEDOWN EQU MOVEUP+$3B
|
|
ADDIYX EQU MOVEDOWN+$39
|
|
ADDYX EQU ADDIYX+$E
|
|
SUBIYX EQU ADDYX+$10
|
|
SUBYX EQU SUBIYX+$12
|
|
CMPYX EQU SUBYX+$10
|
|
CHARTO EQU CMPYX+$F
|
|
PRCHAR EQU CHARTO+$A
|
|
PRINT EQU PRCHAR+$38
|
|
CHAR EQU PRINT+$19
|
|
*
|
|
* PPAK
|
|
*
|
|
DRAWDISPLAY EQU $8E20
|
|
GETOBJ EQU DRAWDISPLAY+$3E
|
|
GETNEXTOBJ EQU GETOBJ+$C
|
|
GETINFO EQU GETNEXTOBJ+$1B
|
|
DRAWOBJ EQU GETINFO+$3E
|
|
SETCOLOR EQU DRAWOBJ+$14
|
|
SCANPOLY EQU SETCOLOR+$25
|
|
ALIGNPOLY EQU SCANPOLY+$404
|
|
GETSCAN EQU ALIGNPOLY+$39
|
|
MAKEHOLE EQU GETSCAN+$57
|
|
SELECTPOLY EQU MAKEHOLE+$4A
|
|
POLYPOINTS EQU SELECTPOLY+$33
|
|
REMOVEPOLY EQU POLYPOINTS+$37
|
|
GETBOUNDS EQU REMOVEPOLY+$6E
|
|
*
|
|
START LDA #$80
|
|
STA CUROBJ
|
|
STA SCANMODE
|
|
JSR DRAWPOLYS
|
|
*
|
|
LDA #0
|
|
STA CURSORY
|
|
STA CURSORXDIV7
|
|
STA CURSORXMOD7
|
|
*
|
|
STA EDITMODE
|
|
STA SLCTMODE
|
|
*
|
|
STA CURNOISE
|
|
JSR INITSOUND
|
|
*
|
|
LDY #2
|
|
JSR SETMODE
|
|
*
|
|
LDA #<HAND
|
|
LDX #>HAND
|
|
JSR XOFFDRAW
|
|
LDA #<PLIER
|
|
LDX #>PLIER
|
|
JSR XOFFDRAW
|
|
LDA #<SCREWDRIVER
|
|
LDX #>SCREWDRIVER
|
|
JSR XOFFDRAW
|
|
LDY #$38
|
|
LDX #$24
|
|
LDA #2
|
|
JSR CHARTO
|
|
LDA #<QUITMSG
|
|
LDX #>QUITMSG
|
|
JSR PRINT
|
|
*
|
|
LDA #1
|
|
STRT2 STA ANDGATE+2
|
|
LDA #<ANDGATE
|
|
LDX #>ANDGATE
|
|
JSR XOFFDRAW
|
|
LDA ANDGATE+2
|
|
CLC
|
|
ADC #15
|
|
CMP #91
|
|
BNE STRT2
|
|
*
|
|
ADC #1 ;ADD 2
|
|
LDX #1
|
|
STX XTEMP
|
|
STRT3 STA NOTE+2
|
|
LDA #<NOTE
|
|
LDX #>NOTE
|
|
JSR XOFFDRAW
|
|
LDY NOTE+2
|
|
LDX #25
|
|
LDA #2
|
|
JSR CHARTO
|
|
LDA XTEMP
|
|
JSR PRCHAR
|
|
INC XTEMP
|
|
LDA NOTE+2
|
|
CLC
|
|
ADC #14
|
|
CMP #191
|
|
BNE STRT3
|
|
*
|
|
LDA #<HAND
|
|
LDX #>HAND
|
|
JSR INITCRSR
|
|
*
|
|
MAIN INC ETIMER
|
|
JSR SOUND
|
|
JSR JSCTRL
|
|
JSR UPDATECRSR
|
|
JSR GETBUTNS
|
|
BPL MAIN
|
|
*
|
|
LDA #<TOOLB
|
|
LDX #>TOOLB
|
|
JSR CRSRINRECT
|
|
BCC MAIN2
|
|
LDA #0
|
|
STA LASTITEM+1
|
|
LDA #<CMDMENU
|
|
LDX #>CMDMENU
|
|
JSR DOMENU
|
|
JMP MAIN
|
|
*
|
|
MAIN2 JSR MODE0
|
|
JMP MAIN
|
|
*
|
|
MODE0 LDA EDITMODE
|
|
BNE MODE1
|
|
JMP SELECTOBJ
|
|
MODE1 CMP #1
|
|
BNE MODE2
|
|
JMP CUTWIRE
|
|
MODE2 JMP ADDWIRE
|
|
*
|
|
DRAWPOLYS LDY #0
|
|
JSR GETOBJ
|
|
DRAWP2 LDA OBJID
|
|
CMP #<BPOLYGON
|
|
BEQ DRAWP3
|
|
CMP #<POLYGON
|
|
BNE DRAWP4
|
|
DRAWP3 JSR DRAWOBJ
|
|
DRAWP4 INC NEXTOBJ
|
|
LDY NEXTOBJ
|
|
JSR GETNEXTOBJ
|
|
LDY NEXTOBJ
|
|
CPY OBJCOUNT
|
|
BNE DRAWP2
|
|
RTS
|
|
*
|
|
INITHAND JSR XDRAWCRSR
|
|
LDA #<HAND
|
|
LDX #>HAND
|
|
LDY #0
|
|
SETEDMODE STY EDITMODE
|
|
JMP INITCRSR
|
|
*
|
|
INITPLIER JSR XDRAWCRSR
|
|
LDA #<PLIER
|
|
LDX #>PLIER
|
|
LDY #1
|
|
BNE SETEDMODE
|
|
*
|
|
INITDRIVER JSR XDRAWCRSR
|
|
LDA #<SCREWDRIVER
|
|
LDX #>SCREWDRIVER
|
|
LDY #2
|
|
BNE SETEDMODE
|
|
*
|
|
QUIT LDA SLCTMODE
|
|
BEQ QUIT3
|
|
CMP #1
|
|
BNE QUIT2
|
|
JSR DISPLAYPOLY
|
|
JMP QUIT3
|
|
QUIT2 JSR DISPLAYAND
|
|
QUIT3 JSR DRAWPOLYS
|
|
PLA
|
|
PLA
|
|
RTS
|
|
*
|
|
SELECTOBJ LDA #<TABLEB
|
|
LDX #>TABLEB
|
|
JSR CRSRINRECT
|
|
BCC SOBJ2
|
|
*
|
|
LDA #1
|
|
JSR SETDSPLY
|
|
JSR SELECTLIB
|
|
STY CUROBJ
|
|
BEQ SPOLY3
|
|
JSR DISPLAYPOLY
|
|
JSR DOSOUND
|
|
SPOLY2 JSR GETBUTNS
|
|
BMI SPOLY2
|
|
RTS
|
|
SPOLY3 STY CURNOISE
|
|
STY CURSCORE
|
|
RTS
|
|
*
|
|
DOSOUND LDY CURNOISE
|
|
BEQ DOSND2
|
|
LDA SOUNDCODE-1,Y
|
|
CMP SERIES
|
|
BMI DOSND2
|
|
STA SERIES
|
|
DOSND2 RTS
|
|
*
|
|
SOUNDCODE HEX 00040C1424384C
|
|
*
|
|
SOBJ2 LDA #<ANDB
|
|
LDX #>ANDB
|
|
JSR CRSRINRECT
|
|
BCC SOBJ3
|
|
*
|
|
LDA #2
|
|
JSR SETDSPLY
|
|
JSR SELECTAND
|
|
STY CUROBJ
|
|
JSR DISPLAYAND
|
|
JSR DOSOUND
|
|
SAND2 JSR GETBUTNS
|
|
BMI SAND2
|
|
RTS
|
|
*
|
|
SOBJ3 LDA #<NOTEB
|
|
LDX #>NOTEB
|
|
JSR CRSRINRECT
|
|
BCC SOBJ4
|
|
*
|
|
LDA CURNOISE
|
|
JSR HLNOISE
|
|
LDA #0
|
|
STA LASTITEM+1
|
|
LDA #<NOTEMENU
|
|
LDX #>NOTEMENU
|
|
JSR DOMENU
|
|
BEQ SNOTE2
|
|
JSR DOSOUND
|
|
LDA CUROBJ
|
|
BEQ SNOTE2
|
|
LDA CURNOISE
|
|
JSR HLNOISE
|
|
JMP FIXOBJ
|
|
SNOTE2 LDA #0
|
|
STA CURNOISE
|
|
JMP FIXOBJ
|
|
*
|
|
NOTEMENU DA NBOX1
|
|
DA SETNOISE
|
|
DA NBOX2
|
|
DA SETNOISE
|
|
DA NBOX3
|
|
DA SETNOISE
|
|
DA NBOX4
|
|
DA SETNOISE
|
|
DA NBOX5
|
|
DA SETNOISE
|
|
DA NBOX6
|
|
DA SETNOISE
|
|
DA NBOX7
|
|
DA SETNOISE
|
|
HEX 00
|
|
*
|
|
SETNOISE LDA YTEMP
|
|
CLC
|
|
ADC #6
|
|
LSR
|
|
LSR
|
|
STA CURNOISE
|
|
RTS
|
|
*
|
|
SOBJ4 LDA SLCTMODE
|
|
CMP #2
|
|
BNE SOBJ5
|
|
LDA #<BMULTBOX
|
|
LDX #>BMULTBOX
|
|
JSR CRSRINRECT
|
|
BCC SOBJ5
|
|
*
|
|
LDA BMULT
|
|
BEQ SBON2
|
|
LDA #<BMULTBOX
|
|
LDX #>BMULTBOX
|
|
JSR DRAWRECT
|
|
SBON2 LDA #0
|
|
STA LASTITEM+1
|
|
LDA #<BMULTMENU
|
|
LDX #>BMULTMENU
|
|
JSR DOMENU
|
|
BEQ SBON3
|
|
LDA #<BMULTBOX
|
|
LDX #>BMULTBOX
|
|
JSR DRAWRECT
|
|
JMP FIXOBJ
|
|
SBON3 LDA #0
|
|
STA BMULT
|
|
JMP FIXOBJ
|
|
*
|
|
BMULTMENU DA BMULTBOX
|
|
DA SETBMUL
|
|
HEX 00
|
|
*
|
|
SETBMUL LDA #$80
|
|
STA BMULT
|
|
RTS
|
|
*
|
|
SCOREMENU DA SCBOX1
|
|
DA SETSCORE
|
|
DA SCBOX2
|
|
DA SETSCORE
|
|
DA SCBOX3
|
|
DA SETSCORE
|
|
DA SCBOX4
|
|
DA SETSCORE
|
|
DA SCBOX5
|
|
DA SETSCORE
|
|
DA SCBOX6
|
|
DA SETSCORE
|
|
DA SCBOX7
|
|
DA SETSCORE
|
|
DA SCBOX8
|
|
DA SETSCORE
|
|
DA SCBOX9
|
|
DA SETSCORE
|
|
DA SCBOX10
|
|
DA SETSCORE
|
|
DA SCBOX11
|
|
DA SETSCORE
|
|
DA SCBOX12
|
|
DA SETSCORE
|
|
DA SCBOX13
|
|
DA SETSCORE
|
|
DA SCBOX14
|
|
DA SETSCORE
|
|
DA SCBOX15
|
|
DA SETSCORE
|
|
HEX 00
|
|
*
|
|
SOBJ5 LDA #<SCOREB
|
|
LDX #>SCOREB
|
|
JSR CRSRINRECT
|
|
BCC SOBJ6
|
|
*
|
|
LDA CURSCORE
|
|
JSR HLSCORE
|
|
LDA #0
|
|
STA LASTITEM+1
|
|
LDA #<SCOREMENU
|
|
LDX #>SCOREMENU
|
|
JSR DOMENU
|
|
BEQ SSCOR2
|
|
LDA CUROBJ
|
|
BEQ SSCOR2
|
|
LDA CURSCORE
|
|
JSR HLSCORE
|
|
JMP FIXOBJ
|
|
SSCOR2 LDA #0
|
|
STA CURSCORE
|
|
JMP FIXOBJ
|
|
*
|
|
SETSCORE LDA YTEMP
|
|
CLC
|
|
ADC #6
|
|
LSR
|
|
LSR
|
|
STA CURSCORE
|
|
RTS
|
|
*
|
|
SOBJ6 RTS
|
|
*
|
|
ADDWIRE LDA SLCTMODE
|
|
CMP #2
|
|
BNE ADDWIR5
|
|
JSR SELECTLIB
|
|
BEQ ADDWIR5
|
|
*
|
|
STY TEMP
|
|
LDY #9
|
|
LDA (LBASE),Y
|
|
BMI ADDWIR5
|
|
*
|
|
LDA TEMP
|
|
LDX CUROBJ
|
|
LDY TIMES4-1,X
|
|
CMP LOGIC,Y
|
|
BEQ ADDWIR5
|
|
CMP LOGIC+1,Y
|
|
BEQ ADDWIR5
|
|
CMP LOGIC+2,Y
|
|
BEQ ADDWIR5
|
|
*
|
|
LDA LOGIC,Y
|
|
BNE ADDWIR2
|
|
LDA TEMP
|
|
STA LOGIC,Y
|
|
LDY #2
|
|
JSR DRAWWIRE
|
|
JMP ADDWIR4
|
|
ADDWIR2 INY
|
|
LDA LOGIC,Y
|
|
BNE ADDWIR3
|
|
LDA TEMP
|
|
STA LOGIC,Y
|
|
LDY #7
|
|
JSR DRAWWIRE
|
|
JMP ADDWIR4
|
|
ADDWIR3 INY
|
|
LDA LOGIC,Y
|
|
BNE ADDWIR5
|
|
LDA TEMP
|
|
STA LOGIC,Y
|
|
LDY #12
|
|
JSR DRAWWIRE
|
|
ADDWIR4 JSR GETBUTNS
|
|
BMI ADDWIR4
|
|
ADDWIR5 RTS
|
|
*
|
|
CUTWIRE LDA SLCTMODE
|
|
CMP #2
|
|
BNE ADDWIR5
|
|
JSR SELECTLIB
|
|
BEQ ADDWIR5
|
|
STY TEMP
|
|
TYA
|
|
LDX CUROBJ
|
|
LDY TIMES4-1,X
|
|
CMP LOGIC,Y
|
|
BNE CUTWIR2
|
|
LDA #0
|
|
STA LOGIC,Y
|
|
LDA TEMP
|
|
LDY #2
|
|
JSR DRAWWIRE
|
|
JMP ADDWIR4
|
|
CUTWIR2 INY
|
|
CMP LOGIC,Y
|
|
BNE CUTWIR3
|
|
LDA #0
|
|
STA LOGIC,Y
|
|
LDA TEMP
|
|
LDY #7
|
|
JSR DRAWWIRE
|
|
JMP ADDWIR4
|
|
CUTWIR3 INY
|
|
CMP LOGIC,Y
|
|
BNE ADDWIR5
|
|
LDA #0
|
|
STA LOGIC,Y
|
|
LDA TEMP
|
|
LDY #12
|
|
JSR DRAWWIRE
|
|
JMP ADDWIR4
|
|
*
|
|
FIXOBJ LDX CUROBJ
|
|
BEQ FIXOBJ3
|
|
LDA SLCTMODE
|
|
CMP #1
|
|
BNE FIXOBJ2
|
|
LDA CURNOISE
|
|
ASL
|
|
ASL
|
|
ASL
|
|
ASL
|
|
ORA CURSCORE
|
|
LDY #9
|
|
STA (LBASE),Y
|
|
RTS
|
|
*
|
|
FIXOBJ2 CMP #2
|
|
BNE FIXOBJ3
|
|
LDA CURNOISE
|
|
ASL
|
|
ASL
|
|
ASL
|
|
ASL
|
|
ORA BMULT
|
|
ORA CURSCORE
|
|
STA TEMP
|
|
LDA TIMES4-1,X
|
|
CLC
|
|
ADC #3
|
|
TAY
|
|
LDA TEMP
|
|
STA LOGIC,Y
|
|
RTS
|
|
*
|
|
TIMES4 HEX 0004080C1014
|
|
*
|
|
FIXOBJ3 RTS
|
|
*
|
|
SETDSPLY CMP SLCTMODE
|
|
BNE SETDSP5
|
|
*
|
|
SETDSP2 CMP #0
|
|
BNE SETDSP3
|
|
RTS
|
|
SETDSP3 CMP #1
|
|
BNE SETDSP4
|
|
JMP DISPLAYPOLY
|
|
SETDSP4 JMP DISPLAYAND
|
|
*
|
|
SETDSP5 PHA
|
|
LDA SLCTMODE
|
|
JSR SETDSP2
|
|
JSR CLEARSB
|
|
PLA
|
|
STA SLCTMODE
|
|
CMP #1
|
|
BNE SETDSP6
|
|
JMP SCMENU
|
|
SETDSP6 JMP BNMENU
|
|
*
|
|
SELECTLIB JSR SELECTPOLY
|
|
BCC SLCTLIB2
|
|
TAY
|
|
JSR GETOBJ
|
|
LDA OBJID
|
|
CMP #<LIBOBJ
|
|
BEQ SLCTLIB3
|
|
SLCTLIB2 LDY #0
|
|
BEQ SLCTLIB4
|
|
SLCTLIB3 LDY NEXTOBJ
|
|
SLCTLIB4 RTS
|
|
*
|
|
SELECTAND LDY #6
|
|
LDA CURSORY
|
|
SLCTAND2 CMP TIMES15-1,Y
|
|
BCS SLCTLIB4
|
|
DEY
|
|
BPL SLCTAND2
|
|
*
|
|
TIMES15 HEX 000F1E2D3C4B
|
|
*
|
|
DISPLAYPOLY LDA CUROBJ
|
|
BEQ DSPLY2
|
|
LDY #9
|
|
LDA (LBASE),Y
|
|
AND #$7F
|
|
STA TEMP
|
|
AND #$0F
|
|
STA CURSCORE
|
|
JSR HLSCORE
|
|
LDA TEMP
|
|
LSR
|
|
LSR
|
|
LSR
|
|
LSR
|
|
STA CURNOISE
|
|
JSR HLNOISE
|
|
JSR GETBOUNDS
|
|
LDA PARAM
|
|
STA POLYB
|
|
LDA PARAM+1
|
|
SEC
|
|
SBC PARAM
|
|
CLC
|
|
ADC #1
|
|
STA POLYB+3
|
|
LDY PARAM+2
|
|
LDA DIV7,Y
|
|
STA POLYB+1
|
|
LDA MOD7,Y
|
|
STA POLYB+2
|
|
LDA PARAM+3
|
|
SEC
|
|
SBC PARAM+2
|
|
TAY
|
|
LDA DIV7,Y
|
|
STA POLYB+4
|
|
LDA MOD7,Y
|
|
STA POLYB+5
|
|
LDA #<POLYB
|
|
LDX #>POLYB
|
|
JSR DRAWRECT
|
|
DSPLY2 RTS
|
|
*
|
|
DISPLAYAND LDX CUROBJ
|
|
BEQ DSPLY2
|
|
*
|
|
LDY TIMES4-1,X
|
|
STY WIRE
|
|
LDA LOGIC,Y
|
|
BEQ DSAND2
|
|
LDY #2
|
|
JSR DRAWWIRE
|
|
DSAND2 INC WIRE
|
|
LDY WIRE
|
|
LDA LOGIC,Y
|
|
BEQ DSAND3
|
|
LDY #7
|
|
JSR DRAWWIRE
|
|
DSAND3 INC WIRE
|
|
LDY WIRE
|
|
LDA LOGIC,Y
|
|
BEQ DSAND4
|
|
LDY #12
|
|
JSR DRAWWIRE
|
|
DSAND4 INC WIRE
|
|
LDY WIRE
|
|
LDA LOGIC,Y
|
|
STA TEMP
|
|
AND #$0F
|
|
STA CURSCORE
|
|
JSR HLSCORE
|
|
LDA TEMP
|
|
AND #$80
|
|
STA BMULT
|
|
BPL DSAND5
|
|
LDA #<BMULTBOX
|
|
LDX #>BMULTBOX
|
|
JSR DRAWRECT
|
|
DSAND5 LDA TEMP
|
|
LSR
|
|
LSR
|
|
LSR
|
|
LSR
|
|
AND #$07
|
|
STA CURNOISE
|
|
JSR HLNOISE
|
|
*
|
|
LDY CUROBJ
|
|
LDA TIMES15-1,Y
|
|
STA ANDBOX
|
|
LDA #<ANDBOX
|
|
LDX #>ANDBOX
|
|
JMP DRAWRECT
|
|
*
|
|
HLSCORE BEQ HLSCR2
|
|
TAY
|
|
LDA SCVERT-1,Y
|
|
STA SCBOX
|
|
LDA #<SCBOX
|
|
LDX #>SCBOX
|
|
JMP DRAWRECT
|
|
HLSCR2 RTS
|
|
*
|
|
SCVERT HEX 0C16202A343E48525C66707A848E98
|
|
*
|
|
HLNOISE BEQ HLSCR2
|
|
TAY
|
|
LDA NVERT-1,Y
|
|
STA NBOX
|
|
LDA #<NBOX
|
|
LDX #>NBOX
|
|
JMP DRAWRECT
|
|
*
|
|
NVERT HEX 5C6A788694A2B0
|
|
*
|
|
DRAWWIRE STY CONTACTY
|
|
TAY
|
|
JSR GETOBJ
|
|
JSR GETBOUNDS
|
|
LDA PARAM+3
|
|
STA X1
|
|
LDA PARAM
|
|
STA Y1
|
|
LDA #160
|
|
STA X2
|
|
LDY CUROBJ
|
|
LDA TIMES15-1,Y
|
|
CLC
|
|
ADC CONTACTY
|
|
STA Y2
|
|
*
|
|
LDX X1
|
|
LDA DIV7,X
|
|
STA POLYB+1
|
|
LDA MOD7,X
|
|
STA POLYB+2
|
|
LDA X2
|
|
CLC
|
|
ADC X1
|
|
ROR
|
|
STA MIDX
|
|
SEC
|
|
SBC X1
|
|
TAX
|
|
LDA DIV7,X
|
|
STA POLYB+4
|
|
LDA MOD7,X
|
|
STA POLYB+5
|
|
LDA #<POLYB
|
|
LDX #>POLYB
|
|
JSR GETRECT
|
|
LDX Y1
|
|
JSR HLINE
|
|
*
|
|
LDX MIDX
|
|
LDA DIV7,X
|
|
STA POLYB+1
|
|
LDA MOD7,X
|
|
STA POLYB+2
|
|
LDA X2
|
|
SEC
|
|
SBC MIDX
|
|
TAX
|
|
LDA DIV7,X
|
|
STA POLYB+4
|
|
LDA MOD7,X
|
|
STA POLYB+5
|
|
LDA #<POLYB
|
|
LDX #>POLYB
|
|
JSR GETRECT
|
|
LDX Y2
|
|
JSR HLINE
|
|
*
|
|
LDA #<POLYB
|
|
LDX #>POLYB
|
|
JSR GETRECT
|
|
LDX Y1
|
|
LDY Y2
|
|
CPY Y1
|
|
BCS DRWIR2
|
|
LDX Y2
|
|
LDY Y1
|
|
DRWIR2 INX
|
|
DEY
|
|
STX TOP
|
|
STY BOTTOM
|
|
LDY LFTDIV7
|
|
LDX LFTMOD7
|
|
JMP VLINE
|
|
*
|
|
CLEARSB LDY #3
|
|
JSR SETMODE
|
|
LDA #<SCOREB
|
|
LDX #>SCOREB
|
|
JSR DRAWRECT
|
|
LDY #2
|
|
JMP SETMODE
|
|
*
|
|
SCMENU LDY #0
|
|
LDA #4
|
|
SCMENU2 STY XTEMP
|
|
STA CHAR+2
|
|
LDA #30
|
|
STA CHAR+3
|
|
LDA #0
|
|
STA CHAR+4
|
|
LDA TXTLO,Y
|
|
LDX TXTHI,Y
|
|
JSR PRINT
|
|
LDA CHAR+2
|
|
CLC
|
|
ADC #10
|
|
LDY XTEMP
|
|
INY
|
|
CPY #16
|
|
BNE SCMENU2
|
|
RTS
|
|
*
|
|
BNMENU LDY #0
|
|
LDA #4
|
|
BNMENU2 STY XTEMP
|
|
STA CHAR+2
|
|
LDA #30
|
|
STA CHAR+3
|
|
LDA #0
|
|
STA CHAR+4
|
|
LDA TXTLO+16,Y
|
|
LDX TXTHI+16,Y
|
|
JSR PRINT
|
|
LDA CHAR+2
|
|
CLC
|
|
ADC #10
|
|
LDY XTEMP
|
|
INY
|
|
CPY #16
|
|
BNE BNMENU2
|
|
LDA #$AA
|
|
STA CHAR+2
|
|
LDA #29
|
|
STA CHAR+3
|
|
LDA #4
|
|
STA CHAR+4
|
|
LDA #<BONUSX
|
|
LDX #>BONUSX
|
|
JMP PRINT
|
|
*
|
|
CMDMENU DA HANDB
|
|
DA INITHAND
|
|
DA PLIERB
|
|
DA INITPLIER
|
|
DA DRIVERB
|
|
DA INITDRIVER
|
|
DA QUITB
|
|
DA QUIT
|
|
HEX 00
|
|
*
|
|
* SOUND EFFECTS
|
|
*
|
|
SOUND LDA ETIMER
|
|
AND #$01
|
|
BEQ *+3
|
|
RTS
|
|
*
|
|
LDA SERIES
|
|
BMI SOUND5
|
|
SOUND1 CLC
|
|
ADC SLICE
|
|
TAX
|
|
STX STEMP
|
|
LDY EFFECTS,X
|
|
SOUND2 LDX NOTES-12,Y
|
|
BEQ SOUND4
|
|
SOUND3 PHA
|
|
PLA
|
|
DEX
|
|
BNE SOUND3
|
|
LDA $C030
|
|
INY
|
|
BNE SOUND2
|
|
SOUND4 INC SLICE
|
|
LDX STEMP
|
|
LDA EFFECTS+1,X
|
|
BNE SOUND5
|
|
*
|
|
INITSOUND LDY #$FF
|
|
STY SERIES
|
|
INY
|
|
STY SLICE
|
|
SOUND5 RTS
|
|
*
|
|
EFFECTS HEX 540C5400 ;0
|
|
HEX 0C1824303C485400 ;4
|
|
HEX 54483C3024180C00 ;12
|
|
HEX 540C540C540C540C0C243C54543C2400 ;20
|
|
HEX 0C1824303C4854483C303C483C303C483C303C00 ;36
|
|
HEX 0C1824303C485454483C3024180C1824303C4800 ;56
|
|
HEX 0C1824300C1824300C1824300C1824300C182400 ;76
|
|
*
|
|
NOTES HEX 103010301030103010301000 ;$0
|
|
HEX 183818381838183818381800 ;$0C
|
|
HEX 204020402040204020402000 ;$18
|
|
HEX 284828482848284828482800 ;$24
|
|
HEX 305030503050305030503000 ;$30
|
|
HEX 385838583858385838583800 ;$3C
|
|
HEX 406040604060406040604000 ;$48
|
|
HEX 486848684868486848684800 ;$54
|
|
*
|
|
TABLEB HEX 000000BF1506
|
|
*
|
|
KITB HEX 001600BF1106
|
|
*
|
|
TOOLB HEX 002400BF0306
|
|
*
|
|
HANDB HEX 0024000F0306
|
|
*
|
|
PLIERB HEX 102400120306
|
|
*
|
|
DRIVERB HEX 232400120306
|
|
*
|
|
QUITB HEX 3624000A0306
|
|
*
|
|
ANDB HEX 0117005A0306
|
|
ANDBOX HEX 0016050E0402
|
|
*
|
|
SCOREB HEX 041D00BB0506
|
|
SCBOX HEX 001D000A0403
|
|
SCBOX1 HEX 0C1D000A0403
|
|
SCBOX2 HEX 161D000A0403
|
|
SCBOX3 HEX 201D000A0403
|
|
SCBOX4 HEX 2A1D000A0403
|
|
SCBOX5 HEX 341D000A0403
|
|
SCBOX6 HEX 3E1D000A0403
|
|
SCBOX7 HEX 481D000A0403
|
|
SCBOX8 HEX 521D000A0403
|
|
SCBOX9 HEX 5C1D000A0403
|
|
SCBOX10 HEX 661D000A0403
|
|
SCBOX11 HEX 701D000A0403
|
|
SCBOX12 HEX 7A1D000A0403
|
|
SCBOX13 HEX 841D000A0403
|
|
SCBOX14 HEX 8E1D000A0403
|
|
SCBOX15 HEX 981D000A0403
|
|
*
|
|
BMULTBOX HEX A81D000A0603
|
|
*
|
|
NOTEB HEX 5C1800620206
|
|
NBOX HEX 0017030D0206
|
|
NBOX1 HEX 5C17030D0206
|
|
NBOX2 HEX 6A17030D0206
|
|
NBOX3 HEX 7817030D0206
|
|
NBOX4 HEX 8617030D0206
|
|
NBOX5 HEX 9417030D0206
|
|
NBOX6 HEX A217030D0206
|
|
NBOX7 HEX B017030D0206
|
|
*
|
|
QUITMSG HEX 1A1E129D
|
|
*
|
|
TXTLO DA <SCOREMSG
|
|
DA <SC1MSG
|
|
DA <SC2MSG
|
|
DA <SC3MSG
|
|
DA <SC4MSG
|
|
DA <SC5MSG
|
|
DA <SC6MSG
|
|
DA <SC7MSG
|
|
DA <SC8MSG
|
|
DA <SC9MSG
|
|
DA <SC10MSG
|
|
DA <SC11MSG
|
|
DA <SC12MSG
|
|
DA <SC13MSG
|
|
DA <SC14MSG
|
|
DA <SC15MSG
|
|
DA <BONUSMSG
|
|
DA <BN1MSG
|
|
DA <BN2MSG
|
|
DA <BN3MSG
|
|
DA <BN4MSG
|
|
DA <BN5MSG
|
|
DA <BN6MSG
|
|
DA <BN7MSG
|
|
DA <BN8MSG
|
|
DA <BN9MSG
|
|
DA <BN10MSG
|
|
DA <BN11MSG
|
|
DA <BN12MSG
|
|
DA <BN13MSG
|
|
DA <BN14MSG
|
|
DA <BN15MSG
|
|
*
|
|
TXTHI DA >SCOREMSG
|
|
DA >SC1MSG
|
|
DA >SC2MSG
|
|
DA >SC3MSG
|
|
DA >SC4MSG
|
|
DA >SC5MSG
|
|
DA >SC6MSG
|
|
DA >SC7MSG
|
|
DA >SC8MSG
|
|
DA >SC9MSG
|
|
DA >SC10MSG
|
|
DA >SC11MSG
|
|
DA >SC12MSG
|
|
DA >SC13MSG
|
|
DA >SC14MSG
|
|
DA >SC15MSG
|
|
DA >BONUSMSG
|
|
DA >BN1MSG
|
|
DA >BN2MSG
|
|
DA >BN3MSG
|
|
DA >BN4MSG
|
|
DA >BN5MSG
|
|
DA >BN6MSG
|
|
DA >BN7MSG
|
|
DA >BN8MSG
|
|
DA >BN9MSG
|
|
DA >BN10MSG
|
|
DA >BN11MSG
|
|
DA >BN12MSG
|
|
DA >BN13MSG
|
|
DA >BN14MSG
|
|
DA >BN15MSG
|
|
*
|
|
SCOREMSG HEX 1C0C181B8E
|
|
SC1MSG HEX 0180
|
|
SC2MSG HEX 0280
|
|
SC3MSG HEX 0380
|
|
SC4MSG HEX 0480
|
|
SC5MSG HEX 0580
|
|
SC6MSG HEX 010080
|
|
SC7MSG HEX 010580
|
|
SC8MSG HEX 020080
|
|
SC9MSG HEX 020580
|
|
SC10MSG HEX 030080
|
|
SC11MSG HEX 040080
|
|
SC12MSG HEX 050080
|
|
SC13MSG HEX 070580
|
|
SC14MSG HEX 01000080
|
|
SC15MSG HEX 01050080
|
|
*
|
|
BONUSMSG HEX 0B18171E9C
|
|
BN1MSG HEX 0194
|
|
BN2MSG HEX 0294
|
|
BN3MSG HEX 0394
|
|
BN4MSG HEX 0494
|
|
BN5MSG HEX 0594
|
|
BN6MSG HEX 0694
|
|
BN7MSG HEX 0794
|
|
BN8MSG HEX 0894
|
|
BN9MSG HEX 0994
|
|
BN10MSG HEX 010094
|
|
BN11MSG HEX 020094
|
|
BN12MSG HEX 030094
|
|
BN13MSG HEX 040094
|
|
BN14MSG HEX 050094
|
|
BN15MSG HEX 01000094
|
|
*
|
|
BONUSX HEX 0B18171E1CA1
|
|
*
|
|
HAND DA *+7
|
|
HEX 0225010C02
|
|
HEX 030006000C00180C
|
|
HEX 34067C067E077E07
|
|
HEX 7C0B780D70060003
|
|
*
|
|
PLIER DA *+7
|
|
HEX 1224060F03
|
|
HEX 3800006000004601005C0300
|
|
HEX 707C0F400338000360000300
|
|
HEX 000300000300000300000300
|
|
HEX 000300000600000C00
|
|
*
|
|
SCREWDRIVER DA *+7
|
|
HEX 2526001001
|
|
HEX 0606060606060606
|
|
HEX 090F0F0F0F0F0F06
|
|
*
|
|
ANDGATE DA *+7
|
|
HEX 0017000D04
|
|
HEX 4F7F03007F010E004F01180040013000
|
|
HEX 400160004F0160787F01607F4F016078
|
|
HEX 40016000400130004F0118007F010E00
|
|
HEX 4F7F0300
|
|
*
|
|
NOTE DA *+7
|
|
HEX 0018000C01
|
|
HEX 70107010101010101E1F1F0E
|