diff --git a/source_disc1/CDRAW.S b/source_disc1/CDRAW.S new file mode 100644 index 0000000..cee7ede --- /dev/null +++ b/source_disc1/CDRAW.S @@ -0,0 +1,951 @@ + 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 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 + 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+1 + LDA #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 +* diff --git a/source_disc1/EDIT.S b/source_disc1/EDIT.S new file mode 100644 index 0000000..32267b6 --- /dev/null +++ b/source_disc1/EDIT.S @@ -0,0 +1,2641 @@ + LST OFF +* + ORG $9500 + OBJ $8500 +* +* 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 +* +B1 EQU $10 +B2 EQU B1+2 +* +* MAIN PROGRAM +* +C EQU $80 +CY EQU C+2 +CXD7 EQU CY+1 +CXM7 EQU CXD7+1 +LASTITEM EQU CXM7+11 +* +* 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 +LB EQU VRTXCOUNT+1 +SCANMODE EQU LB+2 +MEMBTM EQU SCANMODE+1 +MIDBTM EQU MEMBTM+2 +MIDTOP EQU MIDBTM+2 +MIDY EQU MIDTOP+2 +* +* EDITOR +* +COLOR EQU MIDY+1 +CX EQU COLOR+1 +EDITMODE EQU CX+1 +OBJ2 EQU EDITMODE+1 +MAXX EQU OBJ2+2 +MAXY EQU MAXX+1 +MINX EQU MAXY+1 +MINY EQU MINX+1 +LFTSTOP EQU MINY+1 +RTSTOP EQU LFTSTOP+1 +TOPSTOP EQU RTSTOP+1 +BTMSTOP EQU TOPSTOP+1 +DELX EQU BTMSTOP+1 +DELY EQU DELX+1 +DRAGX EQU DELY+1 +DRAGY EQU DRAGX+1 +MINPT EQU MINY+1 +MINDIST EQU MINPT+1 +MINPOLY EQU MINDIST+1 +* +* MAGNIFIER, WORLD +* +VERTA EQU B2+2 +D7A EQU VERTA+1 +M7A EQU D7A+1 +VERTB EQU M7A+1 +D7B EQU VERTB+1 +M7B EQU D7B+1 +BYTE2 EQU M7B+1 +DRCNT EQU BYTE2+1 +ZONE EQU DRCNT+1 +NEXTZONE EQU ZONE+1 +* +COLBW EQU $C0 +GRIDON EQU COLBW+1 +MCOLOR EQU GRIDON+1 +XDIR EQU MCOLOR+1 +YDIR EQU XDIR+1 +VR EQU YDIR+1 +VRY EQU VR +VRXD7 EQU VRY+1 +VRXM7 EQU VRXD7+1 +* NEXT EQU VR+6 +* +SLB EQU $C0 +SLOLD EQU SLB+2 +SLNEW EQU SLOLD+1 +* +COLORBAR EQU $200 +* +* PBDB +* +LOGIC EQU $4000 +WSET EQU $4018 +PBDATA EQU $401C +OBJDX EQU PBDATA+1 +PBDX EQU $6F40 +* +* EXTERNALS +* +D7 EQU $1400 +M7 EQU D7+$100 +LO EQU M7+$100 +HI EQU LO+$C0 +SETMODE EQU HI+$10F +DRAWB EQU SETMODE+$25 +XOFFDRAW EQU DRAWB+$3D +MASKS EQU XOFFDRAW+$9A +HLINE EQU MASKS+$F +VLINE EQU HLINE+$20 +FRAMER EQU VLINE+$58 +DRAWR EQU FRAMER+$28 +INR EQU DRAWR+$10 +GETB EQU INR+$2D +INITC EQU GETB+$7 +XDRAWC EQU INITC+$1B +UPDATEC EQU XDRAWC+$7 +DOCX EQU UPDATEC+$1E +GETCX EQU DOCX+$45 +DOCY EQU GETCX+$16 +JSCTRL EQU DOCY+$4D +CINR EQU JSCTRL+$21 +DOMENU EQU CINR+$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 +* +* 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 +* +* RUNTIME +* +PLAYSTART EQU $8854 +POLY EQU PLAYSTART+$16E +LAUNCHER EQU POLY+$B +LEFTFLIPPER EQU LAUNCHER+$1B +RIGHTFLIPPER EQU LEFTFLIPPER+$1B +BALL EQU RIGHTFLIPPER+$1B +BMP1 EQU BALL+$1B +BMP2 EQU BMP1+$23 +BMP3 EQU BMP2+$23 +BMP4 EQU BMP3+$1B +BMP5 EQU BMP4+$1B +BMP6 EQU BMP5+$1B +LKICK EQU BMP6+$1B +RKICK EQU LKICK+$1D +KICK1 EQU RKICK+$1D +KICK2 EQU KICK1+$1B +ROLL1 EQU KICK2+$1B +ROLL2 EQU ROLL1+$1B +ROLL3 EQU ROLL2+$1B +TARG1 EQU ROLL3+$1B +TARG2 EQU TARG1+$1B +TARG3 EQU TARG2+$1B +TARG4 EQU TARG3+$1B +TARG5 EQU TARG4+$1B +TARG6 EQU TARG5+$1B +LFLIP2 EQU TARG6+$1B +RFLIP2 EQU LFLIP2+$1B +POLY1 EQU RFLIP2+$1B +POLY2 EQU POLY1+$B +POLY3 EQU POLY2+$B +POLY4 EQU POLY3+$B +LANE1 EQU POLY4+$B +LANE2 EQU LANE1+$1B +LANE3 EQU LANE2+$1B +GATE1 EQU LANE3+$1B +GATE2 EQU GATE1+$1B +GATE3 EQU GATE2+$1B +GATE4 EQU GATE3+$1B +DROP1 EQU GATE4+$1B +DROP2 EQU DROP1+$1C +CATCH1 EQU DROP2+$1C +CATCH2 EQU CATCH1+$1D +SPIN EQU CATCH2+$1B +MGNT EQU SPIN+$1B +* +SWAPWIRE EQU $1E08 +SWAPDISK EQU $1E10 +* +START JSR INIT + LDA #0 + STA CY + STA CXD7 + STA CXM7 + STA SCANMODE + JSR DRAWDISPLAY + JSR SAVELOGO +* +DRAWKIT JSR CLEARKIT + LDA #6 + STA COLOR + LDY #0 + STY EDITMODE +* +SETUP STY YTEMP + LDA ICONS,Y + LDX ICONS+1,Y + JSR XOFFDRAW + LDY YTEMP + INY + INY + CPY #108 + BNE SETUP +* + LDA #$80 + STA SCANMODE + LDY #0 +SETUP2 STY NEXTOBJ + LDA POLYS,Y + STA OBJ + LDA POLYS+1,Y + STA OBJ+1 + JSR GETINFO + JSR DRAWOBJ + LDY NEXTOBJ + INY + INY + CPY #8 + BNE SETUP2 +* + LDA #HAND + JSR INITC +* +MAIN JSR JSCTRL + JSR UPDATEC + JSR GETB + BPL MAIN +* + LDA #TABLEB + JSR CINR + BCC MAIN2 + JSR MODE0 + JMP MAIN +* +MODE0 LDA EDITMODE + BNE MODE80 + JMP DRAGOBJ +MODE80 CMP #$80 + BNE MODE81 + JMP DRAGPOINT +MODE81 CMP #$81 + BNE MODE82 + JMP CUTPOINT +MODE82 CMP #$82 + BNE MODE4 + JMP PASTEPOINT +MODE4 JMP PAINTOBJ +* +MAIN2 LDA #TOOLB + JSR CINR + BCC MAIN3 + LDA #0 + STA LASTITEM+1 + JMP DOCMD +* +MAIN3 LDA EDITMODE + BNE MAIN6 + LDY #0 +MAIN4 LDA BOXLO,Y + LDX BOXHI,Y + STY YTEMP + JSR CINR + LDY YTEMP + BCC MAIN5 + LDA OBJADDRHI,Y + STA TEMP + LDA OBJLEN,Y + LDX OBJADDRLO,Y + LDY TEMP + JSR ADDOBJ + JMP MAIN +* +MAIN5 INY + CPY #43 + BCC MAIN4 +MAIN6 JMP MAIN +* +DOCMD LDA #CMDMENU + JSR DOMENU +MAIN8 JMP MAIN +* +HAND DA *+7 + HEX 0225010C02 + HEX 030006000C00180C + HEX 34067C067E077E07 + HEX 7C0B780D70060003 +* +POINTER DA *+7 + HEX 1125030701 + HEX 1F0F0F1F397060 +* +SCISSOR DA *+7 + HEX 1B25020B02 + HEX 10003100330036002C001800 + HEX 30034C04520412030C00 +* +HAMMER DA *+7 + HEX 2925020B02 + HEX 7B005B010001180018001800 + HEX 18001800180018001800 +* +BRUSH DA *+7 + HEX 3725030801 + HEX 3F7C780030303030 +* +INITHAND JSR POINTSOFF + LDA #HAND + LDY #0 +SETEDMODE STY EDITMODE + JMP INITC +* +INITPOINTER JSR POINTSON + LDA #POINTER + LDY #$80 + BNE SETEDMODE +* +INITSCISSOR JSR POINTSON + LDA #SCISSOR + LDY #$81 + BNE SETEDMODE +* +INITHAMMER JSR POINTSON + LDA #HAMMER + LDY #$82 + BNE SETEDMODE +* +INITBRUSH JSR POINTSOFF + LDA #BRUSH + LDY #1 + BNE SETEDMODE +* +POINTSON BIT EDITMODE + BMI POINTS3 + BPL POINTS2 +POINTSOFF BIT EDITMODE + BPL *+5 +POINTS2 JSR DRAWPOINTS +POINTS3 JMP XDRAWC +* +DRAWLOGO LDA #LOGO + JMP DRAWB +* +SAVELOGO LDY #1 + JSR SETMODE + LDA #LOGO + JMP DRAWB +* +LOGO DA $380 + HEX 0016004012 +* +WHITE LDY #6 +SETCLR STY COLOR + JMP SETCOLOR +* +GREEN LDY #2 + BNE SETCLR +* +VIOLET LDY #4 + BNE SETCLR +* +RED LDY #10 + BNE SETCLR +* +BLUE LDY #12 + BNE SETCLR +* +CLEARKIT LDY #3 + JSR SETMODE + LDA #KITB + JSR DRAWR + LDY #2 + JMP SETMODE +* +PLAY JSR POINTSOFF + JSR CLEARKIT + JSR DRAWLOGO + JSR PLAYSTART +REEDIT JSR SAVELOGO + JMP DRAWKIT +* +MAGPAINT JSR POINTSOFF + JSR CLEARKIT + JSR DRAWLOGO + JSR MAGSTART + JMP REEDIT +* +SETWORLD JSR POINTSOFF + JSR CLEARKIT + JSR WORLDSTART + JMP DRAWKIT +* +WIREKIT JSR POINTSOFF + JSR CLEARKIT + JSR SWAPWIRE + JMP DRAWKIT +* +DISKIO JSR POINTSOFF + JSR CLEARKIT + JSR DRAWLOGO + JSR SWAPDISK + JMP REEDIT +* +DRAGOBJ JSR SELECTPOLY + BCS DRAGO2 + RTS +* +DRAGO2 LDX #$80 + STX SCANMODE ;NO MERGE + TAY + JSR GETOBJ +* +DRAGO4 JSR REMOVEPOLY +* +DRAGOBJ2 JSR XDRAWC + JSR GETBOUNDS + LDX PARAM+3 + LDA D7,X + STA CXD7 + LDA M7,X + STA CXM7 + JSR XDRAWC +* + LDY #0 + STY RTSTOP + STY BTMSTOP + LDA #$FF + STA LFTSTOP + STA TOPSTOP +DRAGO5 LDA (PLYPTRX),Y + CMP LFTSTOP + BCS *+4 + STA LFTSTOP + CMP RTSTOP + BCC *+4 + STA RTSTOP + LDA (PLYPTRY),Y + CMP TOPSTOP + BCS *+4 + STA TOPSTOP + CMP BTMSTOP + BCC *+4 + STA BTMSTOP + INY + CPY VRTXCOUNT + BNE DRAGO5 +* + JSR GETCX + STA DRAGX + SEC + SBC LFTSTOP + CLC + ADC #1 + STA LFTSTOP + LDA #255 + SEC + SBC RTSTOP + CLC + ADC DRAGX + SEC + SBC #1 + STA RTSTOP +* + LDA CY + STA DRAGY + SEC + SBC TOPSTOP + CLC + ADC #1 + STA TOPSTOP + LDA #191 + SEC + SBC BTMSTOP + CLC + ADC CY + SEC + SBC #1 + STA BTMSTOP +* +DRAGO6 JSR DRAWOBJ +* + JSR GETCX + CMP LFTSTOP + BCS *+4 + LDA LFTSTOP + CMP RTSTOP + BCC *+4 + LDA RTSTOP + TAX + SEC + SBC DRAGX +* + CMP #$10 + BCC *+6 + CMP #$F0 + BCC DRAGO8 + STA DELX + STX DRAGX +* + LDA CY + CMP TOPSTOP + BCS *+4 + LDA TOPSTOP + CMP BTMSTOP + BCC *+4 + LDA BTMSTOP + TAX + SEC + SBC DRAGY + STA DELY + STX DRAGY +* + LDY #0 +DRAGO7 LDA (PLYPTRX),Y + CLC + ADC DELX + STA (PLYPTRX),Y + LDA (PLYPTRY),Y + CLC + ADC DELY + STA (PLYPTRY),Y + INY + CPY VRTXCOUNT + BNE DRAGO7 +* + LDA OBJID + CMP #TABLEB + JSR CINR + BCC DELETEOBJ + LDA SCANMODE + AND #$7F ;MERGE + STA SCANMODE + JSR DRAWOBJ + BCC RTS1 +* + JSR REMOVEPOLY + JSR DRAWOBJ + JSR REMOVEPOLY + JMP DELETEOBJ +RTS1 RTS +* +DELETEOBJ LDY NEXTOBJ + LDA OBJDX,Y + STA YTEMP + TYA + CLC + ADC #OBJDX + STA TEMP+1 + LDA #1 + LDY #PBDX + BNE DELOBJ2 +* + LDY #0 +DELOBJ4 JSR FIXINDX + INY + JSR FIXINDX + INY + JSR FIXINDX + INY + INY + CPY #24 + BCC DELOBJ4 + RTS +* +FIXINDX LDA LOGIC,Y + CMP NEXTOBJ + BCC FIXIN2 + BNE *+4 + LDA #1 + SBC #1 + STA LOGIC,Y +FIXIN2 RTS +* +ADDOBJ STX OBJ2 + STY OBJ2+1 + STA YTEMP ;SIZE + 1 +* + LDX OBJCOUNT + INX + BMI ABORTAO + LDA MIDTOP + SEC + SBC MIDBTM + TAX + LDA MIDTOP+1 + SBC MIDBTM+1 + BNE ADDOBJ1 + TXA + CMP #32 + BCS ADDOBJ1 +ABORTAO RTS +* +ADDOBJ1 LDA YTEMP + LDY #POLYB + DA >LAUNCHERB + DA >LFLIPB + DA >RFLIPB + DA >BALLB + DA >BMP1B + DA >BMP2B + DA >BMP3B + DA >BMP4B + DA >BMP5B + DA >BMP6B + DA >LKICKB + DA >RKICKB + DA >KICK1B + DA >KICK2B + DA >ROLL1B + DA >ROLL2B + DA >ROLL3B + DA >TARG1B + DA >TARG2B + DA >TARG3B + DA >TARG4B + DA >TARG5B + DA >TARG6B + DA >LFLIP2B + DA >RFLIP2B + DA >POLY1B + DA >POLY2B + DA >POLY3B + DA >POLY4B + DA >LANE1B + DA >LANE2B + DA >LANE3B + DA >GATE1B + DA >GATE2B + DA >GATE3B + DA >GATE4B + DA >DROP1B + DA >DROP2B + DA >CATCH1B + DA >CATCH2B + DA >SPINB + DA >MGNTB +* +OBJLEN HEX 0B1B1B1B222323 + HEX 1B1B1B1B1D1D1B1B1B + HEX 1B1B1B1B1B1B1B1B1B + HEX 1B0B0B0B0B1B1B1B1B + HEX 1B1B1B1C1C1E1B1C1B +* +OBJADDRLO DA POLY + DA >LAUNCHER + DA >LEFTFLIPPER + DA >RIGHTFLIPPER + DA >BALL + DA >BMP1 + DA >BMP2 + DA >BMP3 + DA >BMP4 + DA >BMP5 + DA >BMP6 + DA >LKICK + DA >RKICK + DA >KICK1 + DA >KICK2 + DA >ROLL1 + DA >ROLL2 + DA >ROLL3 + DA >TARG1 + DA >TARG2 + DA >TARG3 + DA >TARG4 + DA >TARG5 + DA >TARG6 + DA >LFLIP2 + DA >RFLIP2 + DA >POLY1 + DA >POLY2 + DA >POLY3 + DA >POLY4 + DA >LANE1 + DA >LANE2 + DA >LANE3 + DA >GATE1 + DA >GATE2 + DA >GATE3 + DA >GATE4 + DA >DROP1 + DA >DROP2 + DA >CATCH1 + DA >CATCH2 + DA >SPIN + DA >MGNT +* +TABLEB HEX 000000BF1506 +* +KITB HEX 001600BF1106 +* +TOOLB HEX 002400BF0306 +* +HANDB HEX 0024000E0306 +* +POINTERB HEX 0F2400090306 +* +SCISSORB HEX 1924000D0306 +* +HAMMERB HEX 2724000D0306 +* +BRUSHB HEX 3524000A0306 +* +WHITEB HEX 402400090306 +* +GREENB HEX 4A2400090306 +* +REDB HEX 542400090306 +* +VIOLETB HEX 5E2400090306 +* +BLUEB HEX 682400090306 +* +PLAYB HEX 7324000C0306 +* +MAGNB HEX 8124000C0306 +* +WORLDB HEX 8F24000C0306 +* +WIREB HEX 9D24000C0306 +* +DISKB HEX AB24000D0306 +* +POLYB HEX 1B1705100202 +* +LAUNCHERB HEX 4922020C0006 +* +LFLIPB HEX 021C06100204 +* +RFLIPB HEX 021F01100204 +* +BALLB HEX 052206050005 +* +BMP1B HEX 301705110203 +* +BMP2B HEX 311A020A0106 +* +BMP3B HEX 301C04100004 +* +BMP4B HEX 351D05050204 +* +BMP5B HEX 3020030D0105 +* +BMP6B HEX 3022030D0105 +* +LKICKB HEX 4417051A0204 +* +RKICKB HEX 441B011A0204 +* +KICK1B HEX 4A1E030D0005 +* +KICK2B HEX 4E1F06060104 +* +ROLL1B HEX A01801050004 +* +ROLL2B HEX A01901050004 +* +ROLL3B HEX A01A01050004 +* +TARG1B HEX A01B03030006 +* +TARG2B HEX A01D00030006 +* +TARG3B HEX A01E04030006 +* +TARG4B HEX A02003070002 +* +TARG5B HEX A02103070002 +* +TARG6B HEX A02203070002 +* +LFLIP2B HEX 0517050A0105 +* +RFLIP2B HEX 0519040A0105 +* +POLY1B HEX 1B1C02120001 +* +POLY2B HEX 201D010D0001 +* +POLY3B HEX 251E000A0405 +* +POLY4B HEX 161E000A0405 +* +LANE1B HEX 9018010A0004 +* +LANE2B HEX 901904080004 +* +LANE3B HEX 901B00050004 +* +GATE1B HEX 901C05090006 +* +GATE2B HEX 901E05090006 +* +GATE3B HEX 902005090006 +* +GATE4B HEX 902205090006 +* +DROP1B HEX 641A00040403 +* +DROP2B HEX 641800200005 +* +CATCH1B HEX 6C1A04130103 +* +CATCH2B HEX 701D00090103 +* +SPINB HEX 642006050006 +* +MGNTB HEX 742006070102 +* +ICONS DA HAND + DA POINTER + DA SCISSOR + DA HAMMER + DA BRUSH + DA WHITEPAINT + DA GREENPAINT + DA VIOLETPAINT + DA REDPAINT + DA BLUEPAINT + DA PLAYICON + DA MAGNIFIER + DA WORLD + DA ANDG + DA DISK + DA POLYICON + DA LAUNCHER+$B + DA LEFTFLIPPER+$B + DA RIGHTFLIPPER+$B + DA BALL+$B + DA BMP1+$13 + DA BMP2+$13 + DA BMP3+$B + DA BMP4+$B + DA BMP5+$B + DA BMP6+$B + DA LKICK+$D + DA RKICK+$D + DA KICK1+$B + DA KICK2+$B + DA ROLL1+$B + DA ROLL2+$B + DA ROLL3+$B + DA TARG1+$B + DA TARG2+$B + DA TARG3+$B + DA TARG4+$B + DA TARG5+$B + DA TARG6+$B + DA LFLIP2+$B + DA RFLIP2+$B + DA LANE1+$B + DA LANE2+$B + DA LANE3+$B + DA GATE1+$B + DA GATE2+$B + DA GATE3+$B + DA GATE4+$B + DA DROP1+$B + DA DROP2+$B + DA CATCH1+$D + DA CATCH2+$B + DA SPIN+$B + DA MGNT+$B +* +POLYS DA POLY1 + DA POLY2 + DA POLY3 + DA POLY4 +* +WHITEPAINT DA *+7 + HEX 4225010702 + HEX 7F077F0700007F077F077F077F07 +* +GREENPAINT DA *+7 + HEX 4C25010702 + HEX 7F077F0700002A052A052A052A05 +* +VIOLETPAINT DA *+7 + HEX 6025010702 + HEX FE0FFE0F0000540A540A540A540A +* +REDPAINT DA *+7 + HEX 5625010702 + HEX FE0FFE0F0000AA85AA85AA85AA85 +* +BLUEPAINT DA *+7 + HEX 6A25010702 + HEX FE8FFE8F0000D48AD48AD48AD48A +* +PLAYICON DA *+7 + HEX 7525000A02 + HEX 1E383F7C7F7C7F7D7E3B7807600F001F003C0030 +* +MAGNIFIER DA *+7 + HEX 8325000A02 + HEX 78010606030C030C030C060678030007000E000C +* +WORLD DA *+7 + HEX 9124060A02 + HEX 70075C0A562A572A572A572A572A562A5C0A7007 +* +ANDG DA *+7 + HEX 9F24060A03 + HEX 730F00333800306000304001334031334031304001306000333800730F00 +* +DISK DA *+7 + HEX AD24060B02 + HEX 7F3F0120612171237123712361210120412041207F3F +* +POLYICON DA *+7 + HEX 1917051003 + HEX 07001C777F1D07001C000000 + HEX 020008020008020008020008 + HEX 020008020008020008020008 + HEX 00000007001C777F1D07001C +* +MAGSTART LDA #ICON1 + JSR XOFFDRAW + JSR DRAWQUIT + LDA #ICON2 + JSR XOFFDRAW +* + JSR INITMAG + LDA #BRUSH + JSR INITC +* +MMAIN JSR JSCTRL + JSR UPDATEC + JSR GETB + BPL MMAIN +* + LDA #VR + JSR CINR + BCC MMAIN3 +MMAIN2 JSR DRAG + JMP MMAIN +* +MMAIN3 LDA #MAGB + JSR CINR + BCC MMAIN4 + LDA #MAG + JSR CINR + BCC *+8 + JSR PLOT + JMP MMAIN + JSR SLIDEMAG + JMP MMAIN +* +MMAIN4 LDA #MCMDB + JSR CINR + BCC MMAIN2 + LDA #0 + STA LASTITEM+1 + JMP MDOCMD +* +MDOCMD LDA #MCMDMENU + JSR DOMENU + JMP MMAIN +* +MCMDMENU DA COLBWB + DA SWITCHCOLBW + DA GRIDB + DA GRIDTOGL + DA MQUITB + DA MQUIT + DA MWHTB + DA MWHITE + DA MGRNB + DA MGREEN + DA MVLTB + DA MVIOLET + DA MREDB + DA MRED + DA MBLUB + DA MBLUE + HEX 00 +* +MQUIT JSR DRAWVIEWR +WQUIT PLA + PLA + RTS +* +DRAWQUIT LDA #3 + LDX #26 + LDY #178 + JSR CHARTO + LDA #QUITMSG + JMP PRINT +QUITMSG HEX 1A1E129D +* +MWHITE LDY #6 +MSETCLR BIT COLBW + BMI MSETCLR2 + STY MCOLOR + JMP SETCOLOR +MSETCLR2 RTS +* +MGREEN LDY #2 + BNE MSETCLR +* +MVIOLET LDY #4 + BNE MSETCLR +* +MRED LDY #10 + BNE MSETCLR +* +MBLUE LDY #12 + BNE MSETCLR +* +PLOT JSR DRAWVIEWR + LDA MCOLOR + JSR INSQR + STX XTEMP + STY YTEMP + STA TEMP + JSR INMAG + BCS PLOT6 + JSR HPLOT + BCC PLOT2 + LDA MCOLOR + BCS PLOT3 +PLOT2 LDA MCOLOR + AND #$08 +PLOT3 TAY + JSR SETCOLOR + LDX XTEMP + LDY YTEMP + LDA TEMP + JSR HPLOT + JMP PLOT5 +* +PLOT4 JSR INSQR + BCC PLOT6 + STX XTEMP + STY YTEMP + STA TEMP + JSR INMAG + BCS PLOT6 + JSR HPLOT + BCC PLOT6 +PLOT5 JSR DISPLAYPLOT +PLOT6 JSR UPDATEC + JSR GETB + BMI PLOT4 + LDY MCOLOR + JSR SETCOLOR + JMP DRAWVIEWR +* +DISPLAYPLOT JSR XDRAWC + LDY CY + LDX D7-71,Y ;64+7 + TXA + CLC + ADC VRY + STA VERTA + LDA MUL7,X + CLC + ADC #71 + STA VERTB +* + LDA VRXD7 + STA D7A + LDA VRXM7 + STA M7A + JSR DOROW + JMP XDRAWC +* +INMAG STX PARAM+3 + STA PARAM+4 + STY PARAM+5 + LDA #MCMDB + JSR INR + LDA TEMP + LDX XTEMP + LDY YTEMP + RTS +* +HPLOT LDA LO,Y + STA B1 + LDA HI,Y + STA B1+1 +* + BIT COLBW + BPL HPLOT2 +* + LDY TEMP + LDA MASK,Y + STA TEMP2 + TXA + TAY + LDA $C062 + AND #$80 + ORA COLORBAR,Y + EOR (B1),Y + AND TEMP2 + EOR (B1),Y + CMP #$80 + BNE *+4 + LDA #0 + CMP (B1),Y + SEC + BNE *+3 + CLC + STA (B1),Y + RTS +* +HPLOT2 TXA + LSR + PHP + ASL + TAY + LDA TEMP + PLP + BCC *+4 + ADC #6 ;ADD 7 + AND #$FE + TAX + LDA CLRMASK,X + STA TEMP2 + LDA CLRMASK+1,X + STA TEMP2+1 + LDA COLORBAR,Y + EOR (B1),Y + AND TEMP2 + EOR (B1),Y + CMP #$80 + BNE *+4 + LDA #0 + CMP (B1),Y + SEC + BNE *+3 + CLC + STA (B1),Y + INY + LDA COLORBAR,Y + EOR (B1),Y + AND TEMP2+1 + EOR (B1),Y + PHP + CMP #$80 + BNE *+4 + LDA #0 + PLP + BCS HPLOT3 + CMP (B1),Y + SEC + BNE *+3 + CLC +HPLOT3 STA (B1),Y + RTS +* +MASK HEX 8182848890A0C0 +* +CLRMASK HEX 83008C00B000C0810086009800E0 +* +MUL7 HEX 00070E151C232A + HEX 31383F464D545B + HEX 626970777E858C + HEX 939AA1A8AFB6BD + HEX C4CBD2D9E0E7EE + HEX F5FC +* +MCMDB HEX 4016007F1106 +* +COLBWB HEX B016000B0106 +* +GRIDB HEX B018000B0106 +* +MQUITB HEX B01A000B0401 +* +MWHTB HEX B01E020B0105 +* +MGRNB HEX B020010B0105 +* +MVLTB HEX B022000B0105 +* +MREDB HEX B023060B0105 +* +MBLUB HEX B025050B0105 +* +ICON1 DA *+7 + HEX B116000A04 + HEX 7E3F3E1F7E303E1F7E303E1F7E303E1F + HEX 7E3000007E303E1F7E303E1F7E303E1F + HEX 7E303E1F7E3F0000 +* +ICON2 DA *+7 + HEX B11E000A0A + HEX 703F781F7C0FFE87FF83 + HEX 703F781F7C0FFE87FF83 + HEX 00000000000000000000 + HEX 703F2815540AAA85D582 + HEX 703F2815540AAA85D582 + HEX 703F2815540AAA85D582 + HEX 703F2815540AAA85D582 + HEX 703F2815540AAA85D582 + HEX 703F2815540AAA85D582 + HEX 703F2815540AAA85D582 +* +INITMAG LDY #4 + JSR SETMODE +* + LDA #MBAR1 + JSR DRAWR + LDA #MBAR2 + JSR DRAWR + LDA #MBAR3 + JSR DRAWR + LDA #MBAR4 + JSR DRAWR +* + LDA #$00 + STA COLBW + STA GRIDON + LDY #6 + STY MCOLOR + JSR SETCOLOR +* + LDA #0 + STA VRY + STA VRXD7 + STA VRXM7 + LDA #13 + STA VR+3 + LDA #2 + STA VR+4 + LDA #1 + STA VR+5 + JSR BLOWUP +* + LDY #2 + JSR SETMODE +* +DRAWVIEWR LDA #VR + JMP FRAMER +* +SWITCHCOLBW LDA COLBW + EOR #$80 + STA COLBW + LDY #6 + STY MCOLOR + JSR SETCOLOR +DOCMDOUT JMP MAGNIFY +* +GRIDTOGL LDA GRIDON + EOR #$80 + STA GRIDON + BMI GRIDTGL2 +* + LDA #$7F + STA GMOD1 + STA GMOD2 + STA GMOD3 + STA GMOD4 + LDA #$2A + STA GMOD5 + LDA #$AA + STA GMOD6 + LDA #$55 + STA GM7 + LDA #$D5 + STA GMOD8 + BNE DOCMDOUT +* +GRIDTGL2 LDA #$3F + STA GMOD1 + STA GMOD3 + STA GMOD4 + LDA #$77 + STA GMOD2 + LDA #$0A + STA GMOD5 + LDA #$8A + STA GMOD6 + LDA #$15 + STA GM7 + LDA #$95 + STA GMOD8 + BNE DOCMDOUT +* +INSQR LDA #MAG + JSR CINR + PHP + LDY CY + LDA D7-71,Y + CLC + ADC VRY + TAY + LDA CXD7 + SEC + SBC #23 + CLC + ADC VRXM7 + LDX VRXD7 +INSQR2 CMP #7 + BCC INSQR3 + SBC #7 + INX + BCS INSQR2 +INSQR3 PLP + RTS +* +SLIDEMAG LDA #0 + STA XDIR + STA YDIR +* + LDA #MBAR1 + JSR CINR + BCC SLIDEM2 + LDY #$FE + STY YDIR + BNE SLIDEM3 +* +SLIDEM2 LDA #MBAR4 + JSR CINR + BCC SLIDEM3 + LDY #2 + STY YDIR +* +SLIDEM3 LDA #MBAR2 + JSR CINR + BCC SLIDEM4 + LDX #$FE + STX XDIR + BNE SLIDEM5 +* +SLIDEM4 LDA #MBAR3 + JSR CINR + BCC SLIDEM5 + LDX #2 + STX XDIR +* +SLIDEM5 JSR XDRAWC + JSR SLIDEVIEWR + JSR XDRAWC + RTS +* +SLIDEVIEWR JSR DRAWVIEWR +* + CLC + LDX VRXD7 + LDA XDIR + BMI SLIDEVWR2 + ADC VRXM7 + CMP #7 + BCC *+5 + SBC #7 + INX + CPX #37 + BCC SLIDEVWR3 + BNE SLIDEVWR4 + CMP #6 + BCC SLIDEVWR3 + BCS SLIDEVWR4 +* +SLIDEVWR2 ADC VRXM7 + BPL *+5 + ADC #7 + DEX + BMI SLIDEVWR4 +* +SLIDEVWR3 STX VRXD7 + STA VRXM7 +* +SLIDEVWR4 CLC + LDA YDIR + BMI SLIDEVWR5 + ADC VRY + CMP #179 + BCS SLIDEVWR7 + BCC SLIDEVWR6 +SLIDEVWR5 ADC VRY + BCC SLIDEVWR7 +SLIDEVWR6 STA VRY +* +SLIDEVWR7 JSR BLOWUP + JSR DRAWVIEWR +* + LDA #50 + JSR $FCA8 + JSR GETB + BPL *+5 + JMP SLIDEVIEWR + RTS +* +DRAG JSR XDRAWC +DRAG2 JSR DRAWVIEWR +* + JSR DOCX + STX CXD7 + STA CXM7 + JSR DOCY + STA CY +* + CMP #178 + BCC *+4 + LDA #178 + STA VRY +* + LDX CXD7 + TXA + LSR + LDA CXM7 + BCS DRAG3 + AND #$FE + BCC DRAG4 +DRAG3 ORA #$01 + CMP #7 + BCC *+5 + LDA #0 + INX +* +DRAG4 CPX #37 + BCC DRAG6 + BNE DRAG5 + CMP #5 + BCC DRAG6 +DRAG5 LDX #37 + LDA #5 +* +DRAG6 STX VRXD7 + STA VRXM7 +* + JSR BLOWUP + JSR DRAWVIEWR +* + LDA #80 + JSR $FCA8 + JSR GETB + BMI DRAG2 + JSR XDRAWC + RTS +* +MAGNIFY JSR DRAWVIEWR + JSR BLOWUP + JMP DRAWVIEWR +* +BLOWUP LDA #71 + STA VERTB + LDA VRY + STA VERTA + LDA VRXD7 + STA D7A + LDA VRXM7 + STA M7A +* +BLOWUP2 JSR DOROW + INC VERTA + LDA VERTB + CLC + ADC #7 + STA VERTB + CMP #169 + BCC BLOWUP2 + RTS +* +DOROW LDY VERTA + LDA LO,Y + STA B1 + LDA HI,Y + STA B1+1 +* + LDY VERTB + LDX #0 + BIT COLBW + BPL DOROWCLR +* +DOROWBW LDA LO,Y + STA UNWND1,X + LDA HI,Y + STA UNWND1+1,X + INY + INX + INX + INX + CPX #18 + BCC DOROWBW +* + JSR INITROW + LDX #16 + STX DRCNT + LDX #23 +* +DODOTBW PHP + LSR + BNE DODOTBW2 + INY + LDA (B1),Y + STA ZONE + ORA #$80 + LSR +* +DODOTBW2 BCC DODOTBW5 + BIT ZONE + BMI DODOTBW3 +* + PLP + PHA + SEC +GMOD1 EQU *+1 + LDA #$7F + BNE ZAPBW +* +DODOTBW3 PLP + PHA + BCC DODOTBW4 +* +GMOD2 EQU *+1 + LDA #$7F + BNE ZAPBW +* +DODOTBW4 SEC + LDA #$70 + BNE ZAPBW +* +DODOTBW5 BIT ZONE + BMI DODOTBW6 +* + PLP + PHA + CLC + LDA #$00 + BCC ZAPBW +* +DODOTBW6 PLP + PHA + BCC DODOTBW7 +* + CLC + LDA #$0F + BNE ZAPBW +* +DODOTBW7 LDA #$00 +* +UNWND1 EQU *+1 +ZAPBW STA $FFFF,X + STA $FFFF,X + STA $FFFF,X + STA $FFFF,X + STA $FFFF,X + STA $FFFF,X + INX + PLA +* + DEC DRCNT + BNE DODOTBW + RTS +* +DOROWCLR LDA LO,Y + STA UNWND2A,X + STA UNWND2B,X + LDA HI,Y + STA UNWND2A+1,X + STA UNWND2B+1,X + INY + INX + INX + INX + CPX #18 + BCC DOROWCLR +* + JSR INITROW + LDX #8 + STX DRCNT + LDX #23 +* +DODOTCLR PHP + LSR + BNE DODOTCLR2 + INY + LDA (B1),Y + STA ZONE + STA NEXTZONE + ORA #$80 + LSR +* +DODOTCLR2 PHP + LSR + BNE DODOTCLR3 + INY + LDA (B1),Y + STA NEXTZONE + ORA #$80 + LSR +* +DODOTCLR3 BCC DODOTCLR6 + PLP + BCC DODOTCLR4 +* + PLP + PHA + SEC +GMOD3 EQU *+1 + LDA #$7F + STA BYTE2 + LDA #$7F + BNE ZAPCLR +* +DODOTCLR4 PLP + PHA + LSR + BNE *+7 + INY + LDA (B1),Y + LSR + DEY + BCC DODOTCLR5 +* + SEC +GMOD4 EQU *+1 + LDA #$7F + STA BYTE2 + LDA #$00 + BCS ZAPCLR +* +DODOTCLR5 SEC + BIT NEXTZONE + BMI *+10 +GMOD5 EQU *+1 + LDA #$2A + STA BYTE2 + LDA #$55 + BNE ZAPCLR +GMOD6 EQU *+1 + LDA #$AA + STA BYTE2 + LDA #$D5 + BNE ZAPCLR +* +DODOTCLR6 PLP + BCC DODOTCLR8 + PLP + PHA + BCC DODOTCLR7 +* + CLC + LDA #$00 + STA BYTE2 + LDA #$7F + BNE ZAPCLR +* +DODOTCLR7 CLC + BIT ZONE + BMI *+10 +GM7 EQU *+1 + LDA #$55 + STA BYTE2 + LDA #$2A + BNE ZAPCLR +GMOD8 EQU *+1 + LDA #$D5 + STA BYTE2 + LDA #$AA + BNE ZAPCLR +* +DODOTCLR8 PLP + PHA + CLC + LDA #$00 + STA BYTE2 +* +UNWND2A EQU *+1 +ZAPCLR STA $FFFF,X + STA $FFFF,X + STA $FFFF,X + STA $FFFF,X + STA $FFFF,X + STA $FFFF,X + INX + LDA BYTE2 +UNWND2B EQU *+1 + STA $FFFF,X + STA $FFFF,X + STA $FFFF,X + STA $FFFF,X + STA $FFFF,X + STA $FFFF,X +* + LDA NEXTZONE + STA ZONE +* + PLA + INX + DEC DRCNT + BEQ *+5 + JMP DODOTCLR + RTS +* +INITROW LDY D7A + LDX M7A + BNE INITROW2 + CLC + DEY + BMI INITROW2 + LDA (B1),Y + ROL + ROL + INY + LDA (B1),Y + STA ZONE + STA NEXTZONE + ORA #$80 + BNE INITROW4 +* +INITROW2 LDA (B1),Y + STA ZONE + STA NEXTZONE + ORA #$80 +INITROW3 LSR + DEX + BNE INITROW3 +INITROW4 RTS +* +MAGB HEX 4016006F1106 +* +MAG HEX 471700610F06 +* +MBAR1 HEX 401600061106 +* +MBAR2 HEX 4016006F0006 +* +MBAR3 HEX 4027006F0006 +* +MBAR4 HEX A91600061106 +* +WORLDSTART JSR DRAWQUIT +* + LDY #0 +WSTRT2 STY YTEMP + LDA SLIDESLO,Y + LDX SLIDESHI,Y + JSR XOFFDRAW + LDY YTEMP + JSR INITSLIDE + INY + CPY #4 + BNE WSTRT2 +* + LDA #0 + LDX #24 + LDY #6 + JSR CHARTO + LDA #HEAD1 + JSR PRINT + LDA #2 + LDX #33 + LDY #6 + JSR CHARTO + LDA #HEAD2 + JSR PRINT + LDA #2 + LDX #25 + LDY #70 + JSR CHARTO + LDA #HEAD3 + JSR PRINT + LDA #0 + LDX #31 + LDY #70 + JSR CHARTO + LDA #HEAD4 + JSR PRINT +* + LDA #HAND + JSR INITC +* +WMAIN JSR JSCTRL + JSR UPDATEC + JSR GETB + BPL WMAIN +* +WMAIN2 LDY #0 +WMAIN3 LDA SLBLO,Y + LDX SLBHI,Y + STY YTEMP + JSR CINR + LDY YTEMP + BCC WMAIN4 + JSR DOSLIDE + JMP WMAIN +WMAIN4 INY + CPY #4 + BNE WMAIN3 +* + LDA #MCMDB + JSR CINR + BCC WMAIN + LDA #0 + STA LASTITEM+1 + JMP WDOCMD +* +WDOCMD LDA #WCMDMENU + JSR DOMENU + JMP WMAIN +* +WCMDMENU DA MQUITB + DA WQUIT + HEX 00 +* +DOSLIDE LDA SLIDESLO,Y + STA SLB + LDA SLIDESHI,Y + STA SLB+1 +DOSL2 LDA WSET,Y + STA SLOLD + LDA CY + SEC + LDY #2 + SBC (SLB),Y + BCS DOSL3 + LDY #0 + BEQ DOSL5 +* +DOSL3 LDY #7 +DOSL4 CMP SLDXDY,Y + BCS DOSL5 + DEY + BNE DOSL4 +DOSL5 STY SLNEW + TYA + LDY YTEMP + STA WSET,Y + JSR MOVESLIDE + JSR UPDATEC + LDY YTEMP + JSR GETB + BMI DOSL2 + RTS +* +INITSLIDE LDA SLIDESLO,Y + STA SLB + LDA SLIDESHI,Y + STA SLB+1 + LDA #0 + STA SLOLD + LDA WSET,Y + STA SLNEW +* +MOVESLIDE LDY #2 + LDA (SLB),Y + STA TEMP + INY + LDA (SLB),Y + STA SLDX+3 +* +MOVESL2 LDY SLOLD + CPY SLNEW + BEQ MOVESL5 + BCS MOVESL3 +* + INC SLOLD + LDA SLDXDY,Y + BNE MOVESL4 +* +MOVESL3 DEC SLOLD + LDA SLDXDY-1,Y +MOVESL4 CLC + ADC TEMP + STA SLDX+2 + LDA #SLDX + JSR XOFFDRAW + JMP MOVESL2 +MOVESL5 LDY YTEMP + RTS +* +SLDXDY HEX 0205080B0E111417 +SLDX DA *+7 + HEX 0000000602 + HEX 300330033003300330033003 +SLBLO DA SL1B + DA >SL2B + DA >SL3B + DA >SL4B +SL1B HEX 101A001C0106 +SL2B HEX 1022001C0106 +SL3B HEX 501A001C0106 +SL4B HEX 5022001C0106 +* +SLIDESLO DA SLIDE1 + DA >SLIDE2 + DA >SLIDE3 + DA >SLIDE4 +SLIDE1 DA SLIDEBITS + HEX 101A001C02 +SLIDE2 DA SLIDEBITS + HEX 1022001C02 +SLIDE3 DA SLIDEBITS + HEX 501A001C02 +SLIDE4 DA SLIDEBITS + HEX 5022001C02 +SLIDEBITS HEX 7F3F03307333773B733343304738 + HEX 4330433047384330433047384330 + HEX 4330473843304330473843304330 + HEX 4738433043304738433003307F3F +* +HEAD1 HEX 101B0A1F121DA2 +HEAD2 HEX 1C190E0E8D +HEAD3 HEX 14120C94 +HEAD4 HEX 0E150A1C1D120C121DA2 diff --git a/source_disc1/PPAK.S b/source_disc1/PPAK.S new file mode 100644 index 0000000..1259c60 --- /dev/null +++ b/source_disc1/PPAK.S @@ -0,0 +1,1249 @@ + LST OFF +* +* PINBALL CONSTRUCTION KIT +* LOW LEVEL STUFF +* + ORG $8E20 + OBJ $7000 +* +* CONSTANTS +* +POLYGON EQU 1 +BPOLYGON EQU 2 +LIBOBJ EQU 3 +* +* GENERAL PARAM SPACE +* +PARAM EQU $0 +* +* PURE TEMPS +* +TEMP EQU $7 +XTEMP EQU TEMP+1 +YTEMP EQU XTEMP+1 +TEMP2 EQU YTEMP+1 +* +* LOCALS FOR 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 +* +* LOCALS FOR RECTANGLES +* +LFTDIV7 EQU BASE2+3 +LEFTMASK EQU LFTDIV7+3 +RTDIV7 EQU LEFTMASK+2 +RIGHTMASK EQU RTDIV7+3 +* +* LOCALS FOR SCAN CONVERSION +* +X1 EQU $10 +Y1 EQU X1+1 +X2 EQU Y1+1 +Y2 EQU X2+1 +DX EQU Y2+1 +DY EQU DX+1 +DXCOEFF EQU DY+1 +DXFRACT EQU DXCOEFF+1 +DXCODE EQU DXFRACT+1 +QUOT EQU DXCODE+1 +DVSR EQU QUOT+2 +DVDND EQU DVSR+2 +SCANLINE EQU DVDND+2 +NEXTSTART EQU SCANLINE+1 +STARTCOUNT EQU NEXTSTART+1 +FIRSTACTV EQU STARTCOUNT+1 +LASTLINK EQU FIRSTACTV+1 +WRAPPOINT EQU LASTLINK+1 +HCNT EQU WRAPPOINT+1 +HCNT2 EQU HCNT+1 +* +* MAIN PROGRAM LOCALS, GLOBALS +* +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 +* +* OBJECT PROCESSING STUFF +* +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 +LGCBASE EQU MIDY+1 +WSBASE EQU LGCBASE+2 +* +* TEMPORARY DATA STRUCTURE +* +ANEXT EQU $C0 +ANVRTX EQU ANEXT+8 +AYFLG EQU ANVRTX+8 +AXCOEFF EQU AYFLG+8 +AXFRACT EQU AXCOEFF+8 +ADXCOEFF EQU AXFRACT+8 +ADXFRACT EQU ADXCOEFF+8 +ADXCODE EQU ADXFRACT+8 +* +COLORBAR EQU $200 +NVRTX EQU $240 +NDXCOEFF EQU NVRTX+64 +NDXFRACT EQU NDXCOEFF+64 +NDXCODE EQU NDXFRACT+64 +DXBUFR EQU NDXCODE+64 +* +* PINBALL DATA STRUCTURE +* +PBDATA EQU $401C +PBDX EQU $6F40 +* +* EXTERNAL CALLS AND ADDRESSES +* +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 +MASKS EQU XOFFDRAW+$9A +HLINE EQU MASKS+$F +VLINE EQU HLINE+$20 +FRAMERECT EQU VLINE+$58 +DRAWRECT EQU FRAMERECT+$28 +INRECT EQU DRAWRECT+$10 +GETBUTN EQU INRECT+$2D +INITCRSR EQU GETBUTN+$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 +* +* POLYGON SCAN CONVERSION, +* PINBALL DATA BASE CONSTRUCTION +* +DRAWDISPLAY LDY PBDATA ;GET OBJ COUNT + STY OBJCOUNT ;INIT INTERNAL DB + JSR GETOBJ + LDA OBJ + STA MEMBTM + STA MIDBTM + LDA OBJ+1 + STA MEMBTM+1 + STA MIDBTM+1 + LDA #PBDX + STA MIDTOP+1 + LDA #1 + STA MIDY +* + LDA #0 + LDY #192 +DRAWD2 STA PBDX-1,Y + DEY + BNE DRAWD2 +* + JSR GETOBJ +DRAWD3 JSR DRAWOBJ +* + INC NEXTOBJ + LDY NEXTOBJ + JSR GETNEXTOBJ + LDY NEXTOBJ + CPY OBJCOUNT + BNE DRAWD3 + RTS +* +GETOBJ LDA #PBDATA+1 + STA OBJ+1 + STY NEXTOBJ + LDY #0 +GETNEXTOBJ LDA PBDATA,Y + CLC + ADC OBJ + STA OBJ + LDA #0 + ADC OBJ+1 + STA OBJ+1 + CPY NEXTOBJ + BEQ GETOBJ3 + INY + BNE GETNEXTOBJ +GETOBJ3 LDA SCANMODE + AND #$80 + STA SCANMODE + LDY #0 + LDA (OBJ),Y ;GET OBJECT ID + STA OBJID + CMP # V3.Y: CALCULATE DX, +* RECALL V1--V2 +* + PLP + JSR DIVIDE + PLP + BCC PRVRTX3 +* +* CHAIN: V1.Y > V2.Y > V3.Y +* + LDX LASTLINK + TYA + STA NVRTX,X + LDA DXCOEFF + STA NDXCOEFF,X + LDA DXFRACT + STA NDXFRACT,X + LDA DXCODE + STA NDXCODE,X + STY LASTLINK + RTS +* +* START: V1.Y < V2.Y > V3.Y +* +PRVRTX3 LDX STARTCOUNT + CPX #8 + BCC *+5 + JMP ABORTSCAN + STY YTEMP + TYA +* + STA ANVRTX,X + LDA X1 + STA AXCOEFF,X + LDA DXCOEFF + STA ADXCOEFF,X + LDA DXFRACT + STA ADXFRACT,X + LDA DXCODE + STA ADXCODE,X +* + LDY LASTLINK + LDA NVRTX,Y + STA ANVRTX+1,X + LDA (PLYPTRX),Y + STA AXCOEFF+1,X + LDA NDXCOEFF,Y + STA ADXCOEFF+1,X + LDA NDXFRACT,Y + STA ADXFRACT+1,X + LDA NDXCODE,Y + STA ADXCODE+1,X +* + LDA Y1 + STA AYFLG,X + STA AYFLG+1,X + LDA #0 + STA AXFRACT,X + STA AXFRACT+1,X +* + INX + INX + STX STARTCOUNT + LDY YTEMP + STY LASTLINK + SEC + RTS +* +* V2.Y < V3.Y: CALCULATE -DX, +* AND RECALL V1--V2 +* +PRVRTX4 EOR #$FF + ADC #1 + STA DY +* + CLC + LDA DX + EOR #$FF + ADC #1 + STA DX + PLP + BCS *+5 + SEC + BCS *+3 + CLC +* + JSR DIVIDE + STY YTEMP + LDY TEMP + PLP + BCC PRVRTX5 +* +* TERMINAL: V1.Y > V2.Y < V3.Y +* + LDX LASTLINK + LDA #$80 + STA NVRTX,X +* +* CHAIN: V1.Y < V2.Y < V3.Y +* +PRVRTX5 LDA LASTLINK +PRVRTX6 STA NVRTX,Y + LDA DXCOEFF + STA NDXCOEFF,Y + LDA DXFRACT + STA NDXFRACT,Y + LDA DXCODE + STA NDXCODE,Y +* + STY LASTLINK + LDY YTEMP + CLC + RTS +* +DIVIDE LDA DX + BNE DIVIDE2 + STA DXCOEFF + STA DXFRACT + LDA #8 + STA DXCODE + RTS +* +DIVIDE2 PHP + BCS DIVIDE3 + EOR #$FF + ADC #1 +* +DIVIDE3 TAX + LDA DY + BEQ DIVIDE4 + STA DVSR+1 + STX DVDND+1 + JSR QDIV +DIVIDE4 STX DXCOEFF + STA DXFRACT +* + CPX #16 + BCC DIVIDE5 + LDA #0 + BEQ DIVIDE7 +DIVIDE5 CPX #1 + BCC DIVIDE6 + LDA DXCODESA,X ;SLOPES < 1 + BNE DIVIDE7 +DIVIDE6 LSR + LSR + LSR + LSR + TAX + LDA DXCODESB,X ;SLOPES > 1 +DIVIDE7 STA DXCODE +* + PLP + BCS DIVIDE8 + LDA #17 ;C=0! + SBC DXCODE + STA DXCODE + LDA DXFRACT + EOR #$FF + ADC #0 ;C=1! + STA DXFRACT + LDA DXCOEFF + EOR #$FF + ADC #0 + STA DXCOEFF +DIVIDE8 RTS +* +DXCODESA HEX 08,0C,0C,0D,0D,0E,0E,0E + HEX 0E,0F,0F,0F,0F,0F,0F,0F +DXCODESB HEX 08,09,09,0A,0A,0B,0B,0B + HEX 0B,0B,0C,0C,0C,0C,0C,0C +* +* QUICK 16 X 8 BIT DIVIDE +* +QDIV LDA #0 ;ZERO QUOTIENT + STA QUOT + STA QUOT+1 + STA DVSR + STA DVDND + LDX #8 + LDA DVSR+1 ;PRE-SCALE DIVISOR +QDV1 INX + ASL + BCS QDV2 + CMP DVDND+1 + BCC QDV1 + CLC +* +QDV2 ROR + STA DVSR+1 + DEX + BNE QDV5 +* +QDV3 LDA DVDND + SBC DVSR + STA DVDND + LDA DVDND+1 + SBC DVSR+1 + STA DVDND+1 +QDV4 ROL QUOT + ROL QUOT+1 + DEX + BMI QDV6 + LSR DVSR+1 + ROR DVSR +QDV5 LDA DVDND+1 + CMP DVSR+1 + BCC QDV4 + BNE QDV3 + LDA DVDND + CMP DVSR + BCS QDV3 + BCC QDV4 +* +QDV6 LDA QUOT + LDX QUOT+1 + RTS +* +* SCAN/MERGE/DRAW ROUTINES +* +DOSCAN LDY SCANLINE + LDA LO,Y + STA BASE1 + LDA HI,Y + STA BASE1+1 +* + LDY HCNT + BEQ DOSCN4 + BIT SCANMODE + BVC DOSCN2 + LDX #153 + BNE DOSCN3 +* +DOSCN2 DEY + DEY + BMI DOSCN4 + LDA (MIDBTM),Y + TAX +DOSCN3 DEY + DEY + LDA (MIDBTM),Y + STY YTEMP + JSR DOBAR + LDY YTEMP + CPY #2 + BNE DOSCN2 +* +* MUST BE B-POLY, FINISH UP +* + DEY + DEY + LDA (MIDBTM),Y + TAX + LDA #0 + JSR DOBAR +* +DOSCN4 BIT SCANMODE + BMI DOSCN7 +* + LDY HCNT + BEQ DOSCN7 + TYA + LDX SCANLINE + CLC + ADC PBDX,X + PHP + STA PBDX,X + LDA MIDTOP + SEC + SBC MIDBTM + TAX + LDA MIDTOP+1 + SBC MIDBTM+1 + BEQ *+4 + LDX #$80 ;128-32 > 32 + TXA + SBC HCNT + CMP #32 + PHP +* +DOSCN5 DEY + LDA DXBUFR,Y + ASL + ASL + ASL + ASL + ORA DXBUFR-2,Y + STA (MIDBTM),Y + DEY + DEY + DEY + BNE DOSCN5 +* + LDA HCNT + LDY #0 + CPY MIDY + STY MIDY + BCS MAKHOL2 +* + LDA # NEW BTM + STA MIDBTM + LDA TEMP+1 + STA MIDBTM+1 + RTS +* +MAKHOL2 LDA #POINT + JSR XOFFDRAW + LDY YTEMP + INY + CPY VRTXCOUNT + BNE POLYPTS2 + RTS +* +POINT DA POINTBITS + HEX 00,00,00,03,01 +POINTBITS HEX 07,07,07 +* +* REMOVE A POLY FROM THE DB +* +REMOVEPOLY JSR GETMINY + JSR MAKEHOLE + LDX MIDY +RMVPLY2 INX + CPX #191 + BCS RMVPLY5 + LDA PBDX,X + BEQ RMVPLY5 + LSR + LSR + STA HCNT + LDY #0 + STY HCNT2 +RMVPLY3 LDY #1 + LDA (MIDTOP),Y + CMP NEXTOBJ + BEQ RMVPLY4 +* + STA (MIDBTM),Y ;PRESERVE IT + INY + LDA (MIDTOP),Y + STA (MIDBTM),Y + INY + LDA (MIDTOP),Y + STA (MIDBTM),Y + LDY #0 + LDA (MIDTOP),Y + STA (MIDBTM),Y +* + LDA MIDBTM ;ADD 4 TO MIDBTM + CLC + ADC #4 + STA MIDBTM + LDA MIDBTM+1 + ADC #0 + STA MIDBTM+1 + BNE *+4 +* +RMVPLY4 INC HCNT2 + LDA MIDTOP + CLC + ADC #4 + STA MIDTOP + LDA MIDTOP+1 + ADC #0 + STA MIDTOP+1 + DEC HCNT + BNE RMVPLY3 +* + LDA HCNT2 + BEQ RMVPLY6 + ASL + ASL + STA TEMP + LDA PBDX,X + SEC + SBC TEMP + STA PBDX,X + JMP RMVPLY2 +* +RMVPLY5 DEX +RMVPLY6 STX MIDY + RTS +* +GETBOUNDS LDY #0 + LDA (PLYPTRY),Y + STA PARAM + STA PARAM+1 + LDA (PLYPTRX),Y + STA PARAM+2 + STA PARAM+3 + INY +GETB2 LDA (PLYPTRY),Y + CMP PARAM + BCS GETB3 + STA PARAM ;MINY +GETB3 CMP PARAM+1 + BCC GETB4 + STA PARAM+1 +GETB4 LDA (PLYPTRX),Y + CMP PARAM+2 + BCS GETB5 + STA PARAM+2 ;MINX +GETB5 CMP PARAM+3 + BCC GETB6 + STA PARAM+3 +GETB6 INY + CPY VRTXCOUNT + BNE GETB2 + RTS diff --git a/source_disc1/RUN2.S b/source_disc1/RUN2.S new file mode 100644 index 0000000..488cbb4 --- /dev/null +++ b/source_disc1/RUN2.S @@ -0,0 +1,1262 @@ + LST OFF +* +* PCS -- PINBALL STUFF +* + ORG $8554 + OBJ $7000 +* +* CONSTANTS +* +LIBOBJ EQU 3 +* +PARAM EQU $00 +TEMP EQU $07 +XTEMP EQU TEMP+1 +YTEMP EQU XTEMP+1 +TEMP2 EQU YTEMP+1 +* +BASE1 EQU $10 +BASE2 EQU BASE1+2 +SHIFTOUT EQU BASE2+2 +SIGN EQU SHIFTOUT+1 +SHIFTCOUNT EQU SIGN+1 +* +PLAYER EQU $80 +PLAYERCNT EQU PLAYER+1 +BALLS EQU PLAYERCNT+1 +SLEEPCNT EQU BALLS+1 +PBASE1 EQU SLEEPCNT+1 +PBASE2 EQU PBASE1+2 +PBASE3 EQU PBASE2+2 +PBASE4 EQU PBASE3+2 +LASTY EQU PBASE4+2 +LIVEBALLS EQU LASTY+1 +GAMEMODE EQU LIVEBALLS+1 +* +STGL EQU $3E +* +OBJ EQU $91 +NEXTOBJ EQU OBJ+2 +OBJCOUNT EQU NEXTOBJ+1 +OBJID EQU OBJCOUNT+5 +FILLCOLOR EQU OBJID+1 +VRTXCOUNT EQU FILLCOLOR+1 +LBASE EQU VRTXCOUNT+1 +* +STACKTEMP EQU $AE +RELOAD EQU $1E1C +* +RUNLEN EQU $C0 +PDL0 EQU RUNLEN+1 +PDL1 EQU PDL0+1 +BUTN0 EQU PDL1+1 +BUTN1 EQU BUTN0+1 +PTIMER1 EQU BUTN1+1 +PTIMER2 EQU PTIMER1+1 +KBD EQU PTIMER2+1 +* +SERIES EQU KBD+1 +SLICE EQU SERIES+1 +STEMP EQU SLICE+1 +DSCORE EQU STEMP+1 +DBONUS EQU DSCORE+1 +BMULT EQU DBONUS+1 +INITMODE EQU BMULT+1 +SCBASE EQU INITMODE+1 +* +BSTAT EQU SCBASE+2 +Y2 EQU BSTAT+4 +* +SHFRSLT EQU $800 +SHFOUT EQU SHFRSLT+$600 +DIV7 EQU SHFOUT+$600 +MOD7 EQU DIV7+$100 +LO EQU MOD7+$100 +HI EQU LO+$C0 +* +SETMODE EQU HI+$10F +XOFFDRAW EQU SETMODE+$62 +CHARTO EQU XOFFDRAW+$435 +PRCHAR EQU CHARTO+$A +PRINT EQU PRCHAR+$38 +CHAR EQU PRINT+$19 +* +DRAWBALL EQU $7C66 +INITBALL EQU $7C90 ;INITB2 +ADVANCE EQU $80DE +* +P1STATE EQU $8F00 +P2STATE EQU P1STATE+$200 +P3STATE EQU P2STATE+$200 +P4STATE EQU P3STATE+$200 +* +SLEEPCODE EQU $9700 +SLEEPLO EQU $9800 +SLEEPHI EQU $9900 +SLEEPERS EQU $9A00 +* +PBTBLO EQU $400 +PBTBHI EQU PBTBLO+$C0 +VECTLO EQU PBTBHI+$C0 +VECTHI EQU VECTLO+$80 +RUNCHN EQU VECTHI+$80 +TIME EQU RUNCHN+$80 +* +LOGIC EQU $4000 +WSET EQU $4018 +PBDATA EQU $401C +PBDX EQU $6F40 +WMOD2 EQU $80BC +WMOD3 EQU $7CD6 +WMOD4 EQU $81DA +* +* MAIN PINBALL CONTROL +* +MAIN LDA #0 + STA STGL + LDA #$FF +MAIN0 STA GAMEMODE + JSR MAKETBLS + JSR INITWORLD + STA $C050 + STA $C052 + STA $C054 + STA $C057 +MAIN1 JSR MAIN2 + JMP MAIN1 +* +DISKPLAY LDA #0 + BEQ MAIN0 +* +MAIN2 JSR MAKEBDSPLY +* + LDA #14 + STA TEMP +WAIT1 LDA #0 + JSR $FCA8 + DEC TEMP + BNE WAIT1 +* + LDA #0 + STA SLEEPCNT + JSR INITPLAYERS + JSR GETPLAYERCNT + LDY #0 +MAIN3 STY BALLS + LDY #0 +MAIN4 STY PLAYER + JSR PRINTPLAYER + LDA #$38 + JSR DOSOUND + JSR DOBALL + JSR TALLY + LDA #0 + STA BMULT + JSR PRBMULT + LDY PLAYER + JSR PRINTPLAYER + LDY PLAYER + INY + CPY PLAYERCNT + BCC MAIN4 +* + LDY BALLS + JSR MAKEBALL + LDY BALLS + INY + CPY #5 + BCC MAIN3 + BCS MAIN2 +* +GETPLAYERCNT LDY #0 + JSR PRINTPLAYER + STA $C010 +GETPL2 LDY #0 +GETPL3 LDA $C061 + ORA $C062 + BPL GETPL5 +* + STY PLAYERCNT +GETPL4 STY XTEMP + JSR PRINTPLAYER + LDY XTEMP + DEY + BPL GETPL4 + INC PLAYERCNT +WAIT3 LDA $C061 + ORA $C062 + BMI WAIT3 + RTS +* +QUIT PLA + PLA + PLA + PLA + JSR CLOSE2 + LDA STACKTEMP + JMP RELOAD +* +GETPL5 LDA $C000 + BPL GETPL3 + STA $C010 + CMP #$9B + BNE NOQUIT + BIT GAMEMODE + BPL QUIT +NOQUIT AND #$7F + CMP #$20 + BNE GETPL3 + INY + CPY #4 + BCC GETPL6 +* + LDY #1 + JSR PRINTPLAYER + LDY #2 + JSR PRINTPLAYER + LDY #3 + JSR PRINTPLAYER + JMP GETPL2 +* +GETPL6 STY XTEMP + JSR PRINTPLAYER + LDY XTEMP + BNE GETPL3 +* +MAKEBDSPLY LDY #4 +MAKBD2 STY YTEMP + JSR MAKEBALL + LDY YTEMP + DEY + BPL MAKBD2 + RTS +* +MAKEBALL TYA + CLC + ADC #$23 + STA MBALL+3 + LDA #MBALL + JMP XOFFDRAW +* +MBALL DA *+7 + HEX 4800000501 + HEX 0E1F1F1F0E +* +INITPLAYERS LDY #44 + LDA #0 + STA DSCORE + STA DBONUS +INITPL2 STA SCORE1,Y + DEY + BPL INITPL2 +* + JSR INITSOUND + LDA #0 + STA INITMODE + JSR INITOBJS +* + LDX #0 + JSR SAVEPLAYER + LDX #1 + JSR SAVEPLAYER + LDX #2 + JSR SAVEPLAYER + LDX #3 + JMP SAVEPLAYER +* +* TALLY BMULT * BONUS, SCORE +* +TALLY LDY PLAYER + LDA SCTBLO,Y + STA SCBASE + LDA SCTBHI,Y + STA SCBASE+1 +TALLY2 LDY #7 +TALLY3 LDX #0 + LDA (SCBASE),Y + CLC + ADC BONUS,Y +TALLY4 CMP #10 + BCC TALLY5 + SBC #10 + INX + BCS TALLY4 +TALLY5 STA (SCBASE),Y + TXA + DEY + ADC (SCBASE),Y + STA (SCBASE),Y + TYA + BNE TALLY3 +* + LDA BMULT + CMP #1 + BEQ TALLY7 +TALLY6 DEC BMULT + BPL TALLY2 +TALLY7 LDA #0 + LDY #7 +TALLY8 STA BONUS,Y + DEY + BPL TALLY8 + JMP SCORE +* +* MAKE SOME TABLES +* +MAKETBLS LDA #>SHFRSLT + STA BASE1+1 + LDA #>SHFOUT + STA BASE2+1 + LDY #0 + STY BASE1 + STY BASE2 + LDA #1 + STA SHIFTCOUNT +* +MAKT2 LDA #0 + STA SHIFTOUT + TYA + AND #$80 + STA SIGN + TYA + AND #$7F + LDX SHIFTCOUNT +MAKT3 ASL + ROL SHIFTOUT + DEX + BNE MAKT3 +* + ROL ;TO 7-BIT FORMAT + ROL SHIFTOUT + LSR +* + ORA SIGN ;ADD ORIGINAL SIGN + CMP #$80 + BNE *+4 + LDA #$00 ;FILTER OUT $80'S + STA (BASE1),Y +* + LDA SHIFTOUT + ORA SIGN + CMP #$80 + BNE *+4 + LDA #$00 + STA (BASE2),Y +* + INY + BNE MAKT2 +* + INC BASE1+1 + INC BASE2+1 + INC SHIFTCOUNT + LDA SHIFTCOUNT + CMP #7 + BNE MAKT2 +* +* NOW MAKE DIV7,MOD7,LO,HI +* + LDA #0 + TAY + TAX +MAKT4 STA MOD7,Y + PHA + TXA + STA DIV7,Y + PLA + CLC + ADC #1 + CMP #7 + BCC *+5 + INX + SBC #7 +* + INY + BNE MAKT4 +* + LDY #0 + LDA #$20 + STA TEMP +MAKT5 STA HI,Y + STA HI+8,Y + STA HI+64,Y + STA HI+72,Y + STA HI+128,Y + STA HI+136,Y + PHA + LDA #$00 + STA LO,Y + LDA #$80 + STA LO+8,Y + LDA #$28 + STA LO+64,Y + LDA #$A8 + STA LO+72,Y + LDA #$50 + STA LO+128,Y + LDA #$D0 + STA LO+136,Y + PLA + CLC + ADC #4 + CMP #$40 + BCS MAKT7 +MAKT6 INY + BNE MAKT5 +* +MAKT7 INC TEMP + TYA + CLC + ADC #8 + TAY + LDA TEMP + CMP #$24 + BCC MAKT6 +* +* MAKE SLEEPLO, HI +* + LDA #SLEEPERS + STA TEMP+1 + LDY #0 + STY SLEEPCNT +MAKT8 STA SLEEPHI,Y + LDA TEMP + STA SLEEPLO,Y + CLC + ADC #22 + STA TEMP + LDA TEMP+1 + ADC #0 + STA TEMP+1 + INY + BNE MAKT8 +* +* NOW SET UP THE GAME +* + LDA PBDATA + STA OBJCOUNT + LDY #0 + STY RUNLEN + JSR GETOBJ +SETUP2 LDA OBJID + CMP #BMMSG + JSR PRINT + JSR PRBMULT +* + LDX #3 +INITSCR2 STX PLAYER + LDA SCVERT,X + STA CHAR+2 + LDA SCTBLO,X + TAY + LDA SCTBHI,X + TAX + JSR PRSCORE + LDX PLAYER + DEX + BPL INITSCR2 +* + LDY #$58 + LDX #$18 + LDA #0 + JSR CHARTO + LDA #BMSG + JSR PRINT + LDY #BONUS +* +PRSCORE STY SCBASE + STX SCBASE+1 +* +PRSCORE2 LDY #0 + JSR SETMODE +* + LDY CHAR+2 + LDX #$27 + LDA #0 + JSR CHARTO +* + LDY #8 +PRSCR2 STY YTEMP + LDA (SCBASE),Y + JSR PRCHAR + DEC CHAR+3 + LDA #0 + STA CHAR+4 + LDY YTEMP + DEY + BNE PRSCR2 +* + LDY #2 + JMP SETMODE +* +SCORE LDX PLAYER + LDA SCVERT,X + STA CHAR+2 + LDY SCTBLO,X + LDA SCTBHI,X + TAX + LDA DSCORE + JSR DOSCORE +* + LDA #$58 + STA CHAR+2 + LDA #BONUS + STA SCBASE+1 + LDA DBONUS + LDY #5 + JSR DOSCORE2 + LDA #0 + STA DSCORE + STA DBONUS + RTS +* +DOSCORE STY SCBASE + STX SCBASE+1 + LDY #7 +DOSCORE2 CLC + ADC (SCBASE),Y + BCC *+4 + LDA #255 + STA (SCBASE),Y +DOSCOR2 LDX #0 + LDA (SCBASE),Y +DOSCOR3 CMP #10 + BCC DOSCOR4 + SBC #10 + INX + BCS DOSCOR3 +DOSCOR4 STA (SCBASE),Y + TXA + DEY + ADC (SCBASE),Y + STA (SCBASE),Y + TYA + BNE DOSCOR2 + JMP PRSCORE2 +* +PRBMULT LDY #0 + JSR SETMODE + LDY #$48 + LDX #$20 + LDA #0 + JSR CHARTO + LDX BMULT + INX + CPX #6 + BCS PRBMUL2 + STX BMULT + TXA + JSR PRCHAR +PRBMUL2 LDY #2 + JMP SETMODE +* +PRINTPLAYER LDA SCVERT,Y + STA CHAR+2 + LDA #$18 + STA CHAR+3 + LDA #0 + STA CHAR+4 + LDA PMSGLO,Y + LDX PMSGHI,Y + JMP PRINT +* +PMSGLO DA P1MSG + DA >P2MSG + DA >P3MSG + DA >P4MSG +* +P1MSG HEX 19150A220E1B81 +P2MSG HEX 19150A220E1B82 +P3MSG HEX 19150A220E1B83 +P4MSG HEX 19150A220E1B84 +BMSG HEX 0B18171E9C +BMMSG HEX 0B18171E1CA1 +* +SCVERT HEX 788898A8 +SCTBLO DA SCORE1 + DA >SCORE2 + DA >SCORE3 + DA >SCORE4 +* +SCORE1 HEX 000000000000000000 +SCORE2 HEX 000000000000000000 +SCORE3 HEX 000000000000000000 +SCORE4 HEX 000000000000000000 +BONUS HEX 000000000000000000 +* +DOSOUND CMP SERIES + BMI DOS2 + STA SERIES + LDA #0 + STA SLICE +DOS2 RTS +* +SOUND BIT STGL + BMI SOUND5 + 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 +* +WIRING LDX #0 +WIR2 LDA #0 + STA TEMP + STX XTEMP + JSR GETST + BPL WIR4 + INX + JSR GETST + BPL WIR4 + INX + JSR GETST + BPL WIR4 +* + INX + STX XTEMP + LDA TEMP + BEQ WIR4 + LDA LOGIC,X + STA YTEMP + AND #$0F + TAY + LDA BONUSTBL,Y + CLC + ADC DBONUS + BCC *+4 + LDA #255 + STA DBONUS + LDA YTEMP + BPL WIR3 +* + JSR PRBMULT +* +WIR3 LDA YTEMP + AND #$70 + LSR + LSR + LSR + LSR + BEQ *+9 + TAX + LDA SOUNDTBL-1,X + JSR DOSOUND +* + DEC XTEMP + JSR TURNOFF + DEC XTEMP + JSR TURNOFF + DEC XTEMP + JSR TURNOFF +* +WIR4 LDA XTEMP + AND #$FC + CLC + ADC #4 + TAX + CPX #24 + BCC WIR2 + RTS +* +BONUSTBL HEX 000102030405060708090A141E283264 +SOUNDTBL HEX 00040C1424384C +* +GETST LDA LOGIC,X + BEQ GETS2 + INC TEMP + TAY + LDA VECTLO,Y + STA BASE1 + LDA VECTHI,Y + STA BASE1+1 + LDY #8 + LDA (BASE1),Y + RTS +GETS2 LDA #$80 +GETS3 RTS +* +TURNOFF LDX XTEMP + LDA LOGIC,X + BEQ GETS3 + TAY + LDA VECTLO,Y + STA LBASE + LDA VECTHI,Y + STA LBASE+1 + LDY #12 + LDA (LBASE),Y + STA TMOD1 + INY + LDA (LBASE),Y + STA TMOD1+1 +TMOD1 EQU *+1 + JMP $FFFF +* +* DO A BALL +* +DOBALL LDA #0 + STA INITMODE + JSR INITOBJS + LDX PLAYER + JSR RESTOREPLAYER +DOBALL2 LDA #0 + STA LIVEBALLS + JSR PLAY +* + LDA $C000 + BPL DOBALL2B + STA $C010 + CMP #$9B + BNE DOBALL2A + BIT GAMEMODE + BMI DOBALL2B + PLA + PLA + PLA + PLA + JSR CLOSEOBJS + LDX PLAYER + JSR SAVEPLAYER + LDA STACKTEMP + JMP RELOAD +* +DOBALL2A CMP #$93 + BNE DOBALL2B + EOR STGL + STA STGL +* +DOBALL2B LDA LIVEBALLS + BNE DOBALL2 +* + LDA #0 + STA PTIMER1 +DOBALL3 JSR PLAY + LDA PTIMER1 + BNE DOBALL3 +* + LDX PLAYER + JSR SAVEPLAYER + LDA #$80 + STA INITMODE + JMP INITOBJS +* +* PINBALL MAIN LOOP +* +PLAY INC PTIMER1 + BNE *+4 + INC PTIMER2 + LDA PTIMER1 + AND #$1F + BNE PLAY2 + LDX #0 + JSR $FB1E + TYA + STA PDL0 +PLAY2 LDA PTIMER1 + CLC + ADC #$10 + AND #$1F + BNE PLAY3 + LDX #1 + JSR $FB1E + TYA + STA PDL1 +PLAY3 LDA $C061 + STA BUTN0 + LDA $C062 + STA BUTN1 +* +WMOD1 EQU *+1 + LDA #16 + JSR $FCA8 +* + LDY #0 +PLAY4 CPY RUNLEN ;127 LIBOBJS + BCS PLAY10 + STY NEXTOBJ +* + LDX RUNCHN,Y + LDA TIME,X + AND PTIMER1 + BNE PLAY9 +* + LDA VECTLO,X + STA LBASE + LDA VECTHI,X + STA LBASE+1 + LDY #10 + LDA (LBASE),Y + STA PMOD1 + INY + LDA (LBASE),Y + STA PMOD1+1 +PMOD1 EQU *+1 + JSR $FFFF +* + LDY NEXTOBJ + LDX RUNCHN,Y + LDA TIME,X + BNE PLAY9 + LDY #16 + LDA (LBASE),Y + ROL + BCS PLAY9 + BPL PLAY6 +* + LDY SLEEPCNT + CPY #255 + BEQ PLAY9 + INC SLEEPCNT + LDA PLAYER + STA SLEEPCODE,Y + LDA SLEEPLO,Y + STA BASE1 + LDA SLEEPHI,Y + STA BASE1+1 + LDY #22 +PLAY5 LDA (LBASE),Y + STA (BASE1),Y + DEY + BPL PLAY5 + JSR INITBALL + JSR DRAWBALL + JMP PLAY7 +* +PLAY6 LDA Y2 + CMP LASTY + BEQ PLAY8 +PLAY7 LDA #$FF + STA LIVEBALLS + BNE PLAY9 +PLAY8 LDA #$80 + STA (LBASE),Y + JSR DRAWBALL +* +PLAY9 LDY NEXTOBJ + INY + BNE PLAY4 +* +PLAY10 LDA PTIMER1 + AND #$1F + BNE *+5 + JSR SCORE + LDA PTIMER1 + AND #$03 + BNE SLEEP + JSR SOUND + JSR WIRING +* +SLEEP LDY #0 +SLEEP2 CPY SLEEPCNT + BCS SLEEP7 + STY NEXTOBJ + LDA SLEEPCODE,Y + CMP PLAYER + BNE SLEEP6 +* + LDA SLEEPLO,Y + STA LBASE + LDA SLEEPHI,Y + STA LBASE+1 + LDY #10 + LDA (LBASE),Y + STA PMOD2 + INY + LDA (LBASE),Y + STA PMOD2+1 +PMOD2 EQU *+1 + JSR $FFFF +* + LDA BSTAT + ROL + BCS SLEEP3 ;EATEN + BMI SLEEP6 ;CAUGHT + LDA Y2 + CMP LASTY + BEQ SLEEP3 ;OFF BOARD + LDA #$FF + STA LIVEBALLS + BNE SLEEP6 +* +SLEEP3 JSR DRAWBALL + LDY NEXTOBJ + CPY SLEEPCNT + BEQ SLEEP5 + LDX SLEEPCNT + LDA SLEEPLO-1,X + STA BASE1 + LDA SLEEPHI-1,X + STA BASE1+1 + LDA SLEEPCODE-1,X + STA SLEEPCODE,Y + LDY #22 +SLEEP4 LDA (BASE1),Y + STA (LBASE),Y + DEY + BPL SLEEP4 +SLEEP5 DEC SLEEPCNT +* +SLEEP6 LDY NEXTOBJ + INY + BNE SLEEP2 +SLEEP7 RTS +* +INITOBJS LDY #0 +INITOBJ2 CPY RUNLEN + BEQ SLEEP7 + STY NEXTOBJ +* + LDX RUNCHN,Y + LDA VECTLO,X + STA LBASE + LDA VECTHI,X + STA LBASE+1 + LDY #12 + LDA (LBASE),Y + STA IMOD2 + INY + LDA (LBASE),Y + STA IMOD2+1 +IMOD2 EQU *+1 + JSR $FFFF + LDY NEXTOBJ + INY + BNE INITOBJ2 +* +CLOSEOBJS LDA #$FF + STA INITMODE + JSR INITOBJS +CLOSE2 LDY #0 +CLOSOBJS2 CPY RUNLEN + BEQ SLEEP7 + STY NEXTOBJ + LDX RUNCHN,Y + LDA VECTLO,X + STA LBASE + LDA VECTHI,X + STA LBASE+1 + LDA TIME,X + LDY #8 + STA (LBASE),Y + LDY NEXTOBJ + INY + BNE CLOSOBJS2 +* +GETOBJ LDA #PBDATA+1 + STA OBJ+1 + STY NEXTOBJ + LDY #0 +GETNEXTOBJ LDA PBDATA,Y + CLC + ADC OBJ + STA OBJ + LDA #0 + ADC OBJ+1 + STA OBJ+1 + CPY NEXTOBJ + BEQ GETOBJ3 + INY + BNE GETNEXTOBJ +GETOBJ3 LDY #0 + LDA (OBJ),Y ;GET OBJECT ID + STA OBJID +* +* GET THE OBJECT'S L-BASE +* + INY + LDA (OBJ),Y + STA FILLCOLOR + INY + LDA (OBJ),Y + STA VRTXCOUNT +* + LDA VRTXCOUNT + ASL + ADC #3 + ADC OBJ + STA LBASE + LDA OBJ+1 + ADC #0 + STA LBASE+1 + RTS +* +* SAVE PLAYER'S STATE +* +SAVEPLAYER JSR PBASES + LDY #0 +SAVEP2 CPY RUNLEN + BCS SAVEP3 + STY NEXTOBJ + LDX RUNCHN,Y + LDA VECTLO,X + STA LBASE + LDA VECTHI,X + STA LBASE+1 +* + LDY #0 + LDA (LBASE),Y + STA PARAM + INY + LDA (LBASE),Y + STA PARAM+1 + LDY #8 + LDA (LBASE),Y + STA PARAM+2 + LDY #16 + LDA (LBASE),Y + STA PARAM+3 +* + LDY NEXTOBJ + LDA PARAM + STA (PBASE1),Y + LDA PARAM+1 + STA (PBASE2),Y + LDA PARAM+2 + STA (PBASE3),Y + LDA PARAM+3 + STA (PBASE4),Y + INY + BNE SAVEP2 +* +SAVEP3 LDY #0 +SAVEP4 CPY SLEEPCNT + BCS SAVEP6 + STY NEXTOBJ + LDA SLEEPCODE,Y + CMP PLAYER + BNE SAVEP5 + LDA SLEEPLO,Y + STA LBASE + LDA SLEEPHI,Y + STA LBASE+1 + JSR DRAWBALL +SAVEP5 LDY NEXTOBJ + INY + BNE SAVEP4 +SAVEP6 RTS +* +* RESTORE A PLAYER +* +RESTOREPLAYER JSR PBASES + LDA #$80 + STA BUTN0 + STA BUTN1 ;FLIPPER PROBLEM +* + LDY #0 +RESTP2 CPY RUNLEN + BCS SAVEP3 + STY NEXTOBJ + LDX RUNCHN,Y + LDA VECTLO,X + STA LBASE + LDA VECTHI,X + STA LBASE+1 + LDA TIME,X + STA STEMP +* + LDA (PBASE1),Y + STA PARAM + LDA (PBASE2),Y + STA PARAM+1 + LDA (PBASE3),Y + STA PARAM+2 + LDA (PBASE4),Y + STA PARAM+3 +* +RESTP3 LDY #0 + LDA (LBASE),Y + CMP PARAM + BNE RESTP4 + INY + LDA (LBASE),Y + CMP PARAM+1 + BEQ RESTP6 +* +RESTP4 LDA STEMP + CMP #3 + BNE RESTP5 + LDY #10 + LDA (LBASE),Y + STA RMOD1 + INY + LDA (LBASE),Y + STA RMOD1+1 +RMOD1 EQU *+1 + JSR $FFFF + JMP RESTP3 +RESTP5 JSR ADVANCE + JMP RESTP3 +* +RESTP6 LDA PARAM+2 + LDX STEMP + CPX #$1F ;DROPTARGETS + BEQ *+6 + LDY #8 + STA (LBASE),Y + LDA PARAM+3 + LDX STEMP ;BALLS + BEQ *+12 + CPX #$1F + BNE *+4 + ORA PARAM+2 + LDY #16 + STA (LBASE),Y +* + LDY NEXTOBJ + INY + BNE RESTP2 +* +PBASES LDA #0 + STA PBASE1 + STA PBASE3 + LDA #$80 + STA PBASE2 + STA PBASE4 + LDA PLTBHI,X + STA PBASE1+1 + STA PBASE2+1 + CLC + ADC #1 + STA PBASE3+1 + STA PBASE4+1 + RTS +* +PLTBHI DA >P1STATE + DA >P2STATE + DA >P3STATE + DA >P4STATE +* +INITWORLD LDX WSET + LDA GRAVTBL,X + STA WMOD4 + LDX WSET+1 + LDA TIMETBL,X + STA WMOD1 + LDX WSET+2 + LDA KICKTBL,X + STA WMOD3 + LDX WSET+3 + LDA ELASTLO,X + STA WMOD2 + LDA ELASTHI,X + STA WMOD2+1 + RTS +* +GRAVTBL HEX FF7F3F1F0F070301 +TIMETBL HEX 302018100C080401 +KICKTBL HEX 04080C1018202838 +ELASTLO HEX 80400000C0804000 +ELASTHI HEX 7878787877777777 diff --git a/source_disc2/BOOT2.S b/source_disc2/BOOT2.S new file mode 100644 index 0000000..ebdfb32 --- /dev/null +++ b/source_disc2/BOOT2.S @@ -0,0 +1,140 @@ +* +* SECOND STAGE BOOT +* + ORG $B700 + OBJ $8000 +* +TEMP EQU 7 +SWAPEDIT EQU $1E00 +* + STX SLOT + STX SLOTFOUND + STX BOOTSLOT + LDA #1 + STA DRIVE + STA DRIVEFOUND + TXA + LSR + LSR + LSR + LSR + TAX + LDA #0 + STA $1FD8,X + STA $1FD0,X + LDA #13 + STA SECTORCOUNT + LDA #1 + LDX #12 + LDY #$B5 + JSR READSECTORS +* + LDA #1 + STA SECTORCOUNT + LDA #3 + LDX #8 + LDY #$40 + JSR READSECTORS +* + LDA #23 + STA SECTORCOUNT + LDA #3 + LDX #6 + LDY #$1E + JSR READSECTORS +* + LDA #32 + STA SECTORCOUNT + LDA #5 + LDX #15 + LDY #$3F + JSR READSECTORS +* + STA $C050 + STA $C052 + STA $C054 + STA $C057 + STA $C010 +TIME LDA #20 + STA TEMP +TIM2 LDA $C000 + ORA $C061 + ORA $C062 + BMI TIM3 + LDA #0 + JSR $FCA8 + DEC TEMP + BPL TIM2 +TIM3 EQU * +* + LDX #$FF + TXS + JMP SWAPEDIT +* +READSECTORS STA TRACK + STX SECTOR + STY READBUFHI + LDA #1 + STA CMDCODE +READS2 LDA #>RWTSPARMS + LDY #HAND + JSR INITCRSR +* + LDA #1 + STA DRIVE + JSR HLDRIVE + LDA #6 + STA SLOT + JSR HLSLOT +* +MAIN JSR JSCTRL + JSR UPDATECRSR + LDA $C061 + BPL MAIN +* +MAIN2 LDA #SLOTB + JSR CRSRINRECT + BCC MAIN3 +* + LDA SLOT + JSR HLSLOT + LDA #0 + STA LASTITEM+1 + LDA #SLOTMENU + JSR DOMENU + BEQ SSLOT3 +SSLOT2 LDA SLOT + JSR HLSLOT + JMP MAIN +SSLOT3 LDA #6 + STA SLOT + BNE SSLOT2 +* +SLOTMENU DA SBOX1 + DA SETSLOT + DA SBOX2 + DA SETSLOT + DA SBOX3 + DA SETSLOT + DA SBOX4 + DA SETSLOT + HEX 00 +* +SETSLOT LDA YTEMP + CLC + ADC #18 + LSR + LSR + STA SLOT + RTS +* +MAIN3 LDA #DRIVEB + JSR CRSRINRECT + BCC MAIN4 +* + LDA DRIVE + JSR HLDRIVE + LDA #0 + STA LASTITEM+1 + LDA #DRIVEMENU + JSR DOMENU + BEQ SDRIV3 +SDRIV2 LDA DRIVE + JSR HLDRIVE + JMP MAIN +SDRIV3 LDA #1 + STA DRIVE + BNE SDRIV2 +* +DRIVEMENU DA DBOX1 + DA SETDRIVE + DA DBOX2 + DA SETDRIVE + HEX 00 +* +SETDRIVE LDA YTEMP + CLC + ADC #6 + LSR + LSR + STA DRIVE + RTS +* +HLSLOT TAY + LDA SLVERT-4,Y + STA SLOTBOX + LDA #SLOTBOX + JMP DRAWRECT +* +SLVERT HEX 4B555F69 +* +HLDRIVE TAY + LDA DRVERT-1,Y + STA DRIVEBOX + LDA #DRIVEBOX + JMP DRAWRECT +* +DRVERT HEX 7E88 +* +MAIN4 LDA #MENUBOX + JSR CRSRINRECT + BCC MAIN5 +* + LDA #0 + STA LASTITEM+1 + LDA #DISKMENU + JSR DOMENU +MAIN5 JMP MAIN +* +HAND DA *+7 + HEX 0000000C02 + HEX 030006000C00180C + HEX 34067C067E077E07 + HEX 7C0B780D70060003 +* +DISKMENU DA LOADBOX + DA LOAD + DA SAVEBOX + DA SAVE + DA QUITBOX + DA QUIT + DA MAKEBOX + DA MAKE + DA PLAYBOX + DA PLAY + HEX 00 +* +TXTLO DA LOADMSG + DA >SAVEMSG + DA >QUITMSG + DA >MAKEMSG + DA >GAMEMSG + DA >PLAYMSG + DA >GAMEMSG + DA >SL4MSG + DA >SL5MSG + DA >SL6MSG + DA >SL7MSG + DA >DR1MSG + DA >DR2MSG +* +LOADMSG HEX 15180A8D +SAVEMSG HEX 1C0A1F8E +QUITMSG HEX 1A1E129D +MAKEMSG HEX 160A148E +PLAYMSG HEX 19150AA2 +GAMEMSG HEX 100A168E +INSERTMSG HEX 12171C0E1B1D2422181E1B24100A160E240D121C14 + HEX 240A170D2411121D240A24140EA2 +* +SL4MSG HEX 1C15181D84 +SL5MSG HEX 1C15181D85 +SL6MSG HEX 1C15181D86 +SL7MSG HEX 1C15181D87 +* +DR1MSG HEX 0D1B121F0E81 +DR2MSG HEX 0D1B121F0E82 +* +MENUBOX HEX 4017006F0F06 +LOADBOX HEX 4B17040A0400 +SAVEBOX HEX 5517040A0400 +QUITBOX HEX 5F17040A0400 +MAKEBOX HEX 731704140402 +PLAYBOX HEX 931704140402 +* +SLOTB HEX 401F00340706 +SLOTBOX HEX 001F040A0503 +SBOX1 HEX 4B1F040A0503 +SBOX2 HEX 551F040A0503 +SBOX3 HEX 5F1F040A0503 +SBOX4 HEX 691F040A0503 +* +DRIVEB HEX 7E1F00140706 +DRIVEBOX HEX 001F040A0505 +DBOX1 HEX 7E1F040A0505 +DBOX2 HEX 881F040A0505 +* +LOAD JSR GETNAME + JSR INPROMPT1 + LDA #0 + STA DISKCMD +* + LDX #1 + JSR OPEN +* + LDA #3 + STA FMPL + LDA #4 + STA FMPL+1 + JSR ZPOSN + LDA #4 + STA FMPL+6 + LDA #0 + STA FMPL+7 + LDA #PBBASE-4 + STA FMPL+9 + JSR DOFCMD +* + LDA #2 + STA FMPL+1 + LDA PBBASE-2 + STA FMPL+6 + LDA PBBASE-1 + STA FMPL+7 + LDA #PBBASE + STA FMPL+9 + JSR DOFCMD +* + JSR CLOSE +* + JSR INIT + LDY PBDATA + JSR GETOBJ + JSR DECOMPRESS + LDA #0 + STA SCANMODE + JSR DRAWDISPLAY + JMP START +* +SAVE JSR GETNAME + JSR INPROMPT1 + LDA #1 + STA DISKCMD + LDA #$80 + STA SCANMODE + JSR DRAWDISPLAY + JSR COMPRESS +* + LDA #PBBASE + STA PARAM+1 + LDA MIDBTM + SEC + SBC #PBBASE + STA PARAM+3 +* + JSR BSAVE +* + LDA #0 + STA SCANMODE + JSR DRAWDISPLAY + JMP START +* +BSAVE LDX #0 + JSR OPEN +* + LDA #4 + STA FMPL + STA FMPL+1 + JSR ZPOSN +* + LDA PARAM + SEC + SBC #4 + STA FMPL+8 + STA TEMP + LDA PARAM+1 + SBC #0 + STA FMPL+9 + STA TEMP+1 + LDA PARAM+2 + CLC + ADC #3 ;LESS 1 + STA FMPL+6 + LDA PARAM+3 + ADC #0 + STA FMPL+7 +* + LDY #0 + LDA PARAM + STA (TEMP),Y + INY + LDA PARAM+1 + STA (TEMP),Y + INY + LDA PARAM+2 + STA (TEMP),Y + INY + LDA PARAM+3 + STA (TEMP),Y +* + JSR DOFCMD + JMP CLOSE +* +ZPOSN LDA #0 + STA FMPL+2 + STA FMPL+3 + STA FMPL+4 + STA FMPL+5 + RTS +* +CLOSE LDA #2 + STA FMPL + LDX #1 + JMP DOFCMD +* +OPEN LDA #1 ;OPEN + STA FMPL + JSR ZPOSN +* + LDA DRIVE + STA FMPL+5 + LDA SLOT + STA FMPL+6 +* + LDA #4 ;BINARY FILE + STA FMPL+7 + LDA #CHARBUF + STA FMPL+9 + BNE DOFCMD2 +* +DOFCMD LDX #1 +DOFCMD2 LDA #FMWB + STA FMPL+13 + LDA #TSBUF + STA FMPL+15 + LDA #DSBUF + STA FMPL+17 + JSR FMGR + BCS ERROR + RTS +* +ERROR LDA DISKCMD + CMP #1 + BNE ERR2 + STA SCANMODE + JSR DRAWDISPLAY +* +ERR2 JSR DODIALOG + LDY #$59 + LDX #1 + LDA #0 + JSR CHARTO + LDY FMPL+10 + LDX ERRTBL,Y +ERR4 LDA ERRMSGS,X + STX XTEMP + AND #$7F + CMP #$20 + BNE ERR5 + LDA CHAR+4 + CLC + ADC #4 + CMP #7 + BCC *+7 + SBC #7 + INC CHAR+3 + STA CHAR+4 + JMP ERR6 +ERR5 CMP #$41 + BCC ERR6 + CMP #$5B + BCS ERR6 + SBC #$36 + JSR PRCHAR +ERR6 LDX XTEMP + LDA ERRMSGS,X + BMI ERR7 + INX + BNE ERR4 +* +ERR7 LDA $C000 + BPL ERR7 + STA $C010 +* + JSR UNDODIALOG + LDA DISKCMD + CMP #2 + BEQ MAKEOUT + JMP START +* +QUIT LDX STACKTEMP + TXS + RTS +* +MAKE JSR GETNAME + LDY CHARINDX + LDA #$A0 + STA CHARBUF,Y + STA CHARBUF+1,Y + STA CHARBUF+2,Y +* + LDA #2 + STA DISKCMD + JSR CLEARMENU + LDY #191 + JSR MAKEHOLE + JSR SWAPUSER + JSR INPROMPT1 +* + LDA #$4C ;JMP OP + STA GAMEBTM + LDA #GAMESTART + STA GAMEBTM+2 +* + LDA #GAMEBTM + STA PARAM+1 + LDA #GAMETOP + SBC #>GAMEBTM + STA PARAM+3 +* + JSR BSAVE +* +MAKEOUT LDA #GAMEBTM-4 + STA TEMP+1 + LDA #$3F ;PATCH TABLE + LDY #6 +MAK2 STA (TEMP),Y + SEC + SBC #4 + DEY + BPL MAK2 +* +QUITMAKE LDA STACKTEMP + JMP RELOAD +* +PLAY JSR CLEARMENU + LDY #191 + JSR MAKEHOLE + JSR SWAPUSER + JSR PLAYGAME + JMP QUITMAKE +* +INPROMPT1 JSR DODIALOG + LDY #$59 + LDX #1 + LDA #0 + JSR CHARTO + LDA #INSERTMSG + JSR PRINT +* + STA $C010 +WAIT1 LDA $C000 + BPL WAIT1 + STA $C010 + JMP UNDODIALOG +* +CLEARMENU JSR XDRAWCRSR + LDY #3 + JSR SETMODE + LDA #MENUBOX + JSR DRAWRECT + LDY #2 + JMP SETMODE +* +DODIALOG LDY #1 + JSR SETMODE + LDA #DIALOGBITS + JSR DRAWBITS + LDY #3 + JSR SETMODE + LDA #DIALOGBOX + JSR DRAWRECT + LDY #2 + JSR SETMODE + JMP FRAMERECT+3 +* +UNDODIALOG LDY #0 + JSR SETMODE + LDA #DIALOGBITS + JSR DRAWBITS + LDY #0 + TYA +UNDODLG2 STA $400,Y + STA $500,Y + STA $600,Y + INY + BNE UNDODLG2 + LDY #2 + JMP SETMODE +* +GETNAME JSR CLEARMENU + JSR DODIALOG + LDY #29 + LDA #$A0 +GETN2 STA CHARBUF,Y + DEY + BPL GETN2 +* + LDY #$59 + LDX #$01 + LDA #0 + STX BOXCURSOR+3 + STA BOXCURSOR+4 + STA BOXCURSORON + STA CHARINDX + JSR CHARTO +* +GETN3 JSR CHECKCURSOR + LDA $C000 + BPL GETN3 + STA $C010 + STA CHARASCII + CMP #$9B + BEQ GETN4 + CMP #$8D + BEQ GETN5 ;C=1 + JSR CURSOROFF + LDA CHARASCII + JSR DOKBD + JSR CURSOROFF + JMP GETN3 +* +GETN4 CLC +GETN5 PHP + JSR CURSOROFF +* + JSR UNDODIALOG + LDY CHARINDX + LDA #$AE + STA CHARBUF,Y + LDA #$D0 + STA CHARBUF+1,Y + LDA #$C2 + STA CHARBUF+2,Y + PLP + BCS GETN6 + LDX STACKTEMP + TXS + JMP START +GETN6 RTS +* +DIALOGBITS DA $A000 + HEX 5700000B28 +* +DIALOGBOX HEX 5700000A2705 +* +DOKBD LDY CHARINDX + CMP #$88 + BEQ DOKB7 +* + CPY #27 + BCS DOKB5 +* + CMP #$A0 + BNE DOKB2 +* + STA CHARBUF,Y + LDA CHAR+3 + STA LINELEN,Y + TAX + LDA CHAR+4 + STA LINELEN+27,Y + CLC + ADC #4 + CMP #7 + BCC *+5 + SBC #7 + INX + STX CHAR+3 + STX BOXCURSOR+3 + STA CHAR+4 + STA BOXCURSOR+4 + JMP DOKB4 +* +DOKB2 CMP #$B0 + BCC DOKB5 + CMP #$BA + BCS DOKB6 + SBC #$AF ;C=0, -B0 +* +DOKB3 TAX + LDA CHARASCII + STA CHARBUF,Y + LDA CHAR+3 + STA LINELEN,Y + LDA CHAR+4 + STA LINELEN+27,Y + TXA + JSR PRCHAR + LDA CHAR+3 + STA BOXCURSOR+3 + LDA CHAR+4 + STA BOXCURSOR+4 +DOKB4 INC CHARINDX +DOKB5 RTS +* +DOKB6 CMP #$C1 + BCC DOKB5 + CMP #$DB + BCS DOKB5 + SBC #$B6 ;C=0 -B7 + BNE DOKB3 +* +DOKB7 DEY + BMI DOKB5 + STY CHARINDX + LDA LINELEN,Y + STA CHAR+3 + STA CLRRECT+1 + STA BOXCURSOR+3 + LDA LINELEN+27,Y + STA CHAR+4 + STA CLRRECT+2 + STA BOXCURSOR+4 + LDA #$A0 + STA CHARBUF,Y + LDY #3 + JSR SETMODE + LDA #CLRRECT + JSR DRAWRECT + LDY #2 + JMP SETMODE +* +CLRRECT HEX 590000070006 +* +CURSOROFF LDA BOXCURSORON + BNE DOCURSOR + RTS +* +CHECKCURSOR INC DTIMER1 + BNE DOCR2 + INC DTIMER2 + LDA DTIMER2 + AND #$1F + BNE DOCR2 + LDA BOXCURSORON + EOR #$FF + STA BOXCURSORON +* +DOCURSOR LDA #BOXCURSOR + JMP XOFFDRAW +* +DOCR2 RTS +* +BOXCURSOR DA *+7 + HEX 5900000701 + HEX 3F3F3F3F3F3F3F +* +COMPRESS LDA #HIRES1 + STA BASE1+1 + LDA HTOP + PHA + LDA #$FF + STA HTOP-1 + STA HTOP +* +FINDZ LDY #0 +FINDZ2 LDA (BASE1),Y + BNE FINDZ3 + INY + BNE FINDZ2 +* + LDA #1 + STA (MIDBTM),Y + TYA + INY + STA (MIDBTM),Y ;1/256 RECORD +* + INC BASE1+1 ;BASE+256 + LDA MIDBTM ;MIDBTM+2 + CLC + ADC #2 + STA MIDBTM + BCC *+4 + INC MIDBTM+1 + JMP FINDZ +* +FINDZ3 LDA BASE1+1 + CMP #>HTOP + BCS FINDZ4 + CPY #2 + BCC FINDNZ +FINDZ4 STY TEMP + LDA #1 + LDY #0 + STA (MIDBTM),Y + INY + LDA TEMP + STA (MIDBTM),Y ;1/RUNLEN REC +* + CLC + ADC BASE1 ;BASE+RUNLEN + STA BASE1 + BCC *+4 + INC BASE1+1 + LDA MIDBTM ;MIDBTM+2 + CLC + ADC #2 + STA MIDBTM + BCC *+4 + INC MIDBTM+1 +* + LDA BASE1+1 + CMP #>HTOP + BCC FINDZ + LDY #0 + LDA #1 + STA (MIDBTM),Y + INY + STA (MIDBTM),Y ;1/1 REC +* + LDA MIDBTM + CLC + ADC #2 + STA MIDBTM + BCC *+4 + INC MIDBTM+1 +* + PLA + STA HTOP + RTS +* +FINDNZ INY +FINDNZ2 LDA (BASE1),Y + BEQ FINDNZ5 + INY + BNE FINDNZ2 +* +FINDNZ3 TYA + STA (MIDBTM),Y + INC MIDBTM + BNE *+4 + INC MIDBTM+1 +* +FINDNZ4 LDA (BASE1),Y + STA (MIDBTM),Y + INY + BNE FINDNZ4 ;256/BYTES REC +* + INC BASE1+1 + INC MIDBTM+1 + JMP FINDZ +* +FINDNZ5 INY + BEQ FINDNZ3 + LDA (BASE1),Y + BNE FINDNZ2 + STY TEMP + TYA + LDY #0 + STA (MIDBTM),Y + INC MIDBTM + BNE *+4 + INC MIDBTM+1 +* +FINDNZ6 LDA (BASE1),Y + STA (MIDBTM),Y + INY + BNE FINDNZ6 ;RUN LEN/BYTES REC +* + LDA TEMP + CLC + ADC BASE1 + STA BASE1 + BCC *+4 + INC BASE1+1 + LDA TEMP + CLC + ADC MIDBTM + STA MIDBTM + BCC *+4 + INC MIDBTM+1 + JMP FINDZ +* +DECOMPRESS LDA #HIRES1 + STA BASE1+1 + LDA HTOP + PHA +* +DCMP2 LDY #0 + LDA (OBJ),Y + CMP #1 + BNE DCMP6 +* + INY + LDA (OBJ),Y + CMP #1 + BEQ DCMP5 + STA TEMP + TAY + DEY +* + LDA #0 +DCMP3 STA (BASE1),Y + DEY + BNE DCMP3 + STA (BASE1),Y +* + LDA TEMP + BEQ DCMP4 + CLC + ADC BASE1 + STA BASE1 + BCC *+4 +DCMP4 INC BASE1+1 + LDA OBJ + CLC + ADC #2 + STA OBJ + BCC *+4 + INC OBJ+1 + JMP DCMP2 +* +DCMP5 PLA + STA HTOP + RTS +* +DCMP6 STA TEMP + INC OBJ + BNE *+4 + INC OBJ+1 + TAY + DEY +* +DCMP7 LDA (OBJ),Y + STA (BASE1),Y + DEY + BNE DCMP7 + LDA (OBJ),Y + STA (BASE1),Y +* + LDA TEMP + BEQ DCMP8 + CLC + ADC BASE1 + STA BASE1 + BCC *+4 +DCMP8 INC BASE1+1 + LDA TEMP + BEQ DCMP9 + CLC + ADC OBJ + STA OBJ + BCC *+4 +DCMP9 INC OBJ+1 + JMP DCMP2 diff --git a/source_disc2/RUN.S b/source_disc2/RUN.S new file mode 100644 index 0000000..576b95b --- /dev/null +++ b/source_disc2/RUN.S @@ -0,0 +1,2752 @@ + LST OFF +* + ORG $7700 + OBJ $8380 +* +* CONSTANTS +* +LIBOBJ EQU 3 +* +T EQU $07 +XT EQU T+1 +YT EQU XT+1 +T2 EQU YT+1 +* +B1 EQU $10 +B2 EQU B1+2 +B3 EQU B2+2 +* +THETA EQU B2+2 +BCODE EQU THETA+1 +KICK EQU BCODE+1 +* +FLIPR EQU KICK+1 +FRAME EQU FLIPR+1 +LEFTX EQU FRAME+1 +FDIR EQU LEFTX+1 +FX1 EQU FDIR+1 +FX2 EQU FX1+1 +FWIDTH EQU FX2+1 +* +OBJ EQU $91 +NOBJ EQU OBJ+2 +OBJCOUNT EQU NOBJ+1 +OBJID EQU OBJCOUNT+5 +LB EQU OBJID+3 +MIDTOP EQU LB+7 +* +RUNLEN EQU $C0 +PDL0 EQU RUNLEN+1 +PDL1 EQU PDL0+1 +BTN0 EQU PDL1+1 +BTN1 EQU BTN0+1 +PTM1 EQU BTN1+1 +PTM2 EQU PTM1+1 +KBD EQU PTM2+1 +* +SERIES EQU KBD+1 +SLICE EQU SERIES+1 +ST EQU SLICE+1 +DSCORE EQU ST+1 +DBONUS EQU DSCORE+1 +BMULT EQU DBONUS+1 +INITMODE EQU BMULT+1 +SCB EQU INITMODE+1 +* +BST EQU SCB+2 +X1 EQU BST+1 +Y1 EQU X1+1 +X2 EQU Y1+1 +Y2 EQU X2+1 +BDX EQU Y2+1 +BDY EQU BDX+1 +BXACC EQU BDY+1 +BYACC EQU BXACC+1 +BMOVE EQU BYACC+1 +MIDX EQU BMOVE+1 +* +HCNT EQU MIDX+1 +HT EQU HCNT+1 +HVAL EQU HT+1 +P1 EQU HVAL+1 +P2 EQU P1+1 +RTT EQU P2+1 +LFT EQU RTT+1 +HTCNT EQU LFT+1 +LASTY EQU HTCNT+1 +* +STGL EQU $3E +* +PBTBLO EQU $400 +PBTBHI EQU $4C0 +VLO EQU $580 +VHI EQU $600 +RCN EQU $680 +TIME EQU $700 +* +LOGIC EQU $4000 +WSET EQU $4018 +PBDATA EQU $401C +PBDX EQU $6F40 +* +DIV7 EQU $1400 +MOD7 EQU DIV7+$100 +SETMODE EQU MOD7+$2CF +XOFFDRAW EQU SETMODE+$62 +CHARTO EQU XOFFDRAW+$435 +PRCHAR EQU CHARTO+$A +PRINT EQU PRCHAR+$38 +CHAR EQU PRINT+$19 +* +GETOBJ EQU $8E5E +GETNOBJ EQU GETOBJ+$C +MAKEHOLE EQU GETNOBJ+$526 +* +BITMAPS EQU $7000 +LAUNCHERB EQU BITMAPS +LFLIPB EQU LAUNCHERB+$48 +RFLIPB EQU LFLIPB+$CF +BMP1B EQU RFLIPB+$CF +BMP2B EQU BMP1B+$54 +BMP3B EQU BMP2B+$2C +BMP4B EQU BMP3B+$20 +BMP5B EQU BMP4B+$2A +BMP6B EQU BMP5B+$34 +LKICKB EQU BMP6B+$34 +RKICKB EQU LKICKB+$A2 +KNOCK1B EQU RKICKB+$A2 +KNOCK2B EQU KNOCK1B+$30 +ROLLB EQU KNOCK2B+$36 +LFLIP2B EQU ROLLB+$5A +RFLIP2B EQU LFLIP2B+$5C +LANEB EQU RFLIP2B+$5C +DROP1B EQU LANEB+$3B +DROP2B EQU DROP1B+$23 +CATCH1B EQU DROP2B+$20 +CATCH2B EQU CATCH1B+$26 +SPINB EQU CATCH2B+$5A +MAGB EQU SPINB+$F +BALLB EQU MAGB+$E +* +C05625 HEX 0004080C1014181C + HEX 2024282C3034383C + HEX 4044484C5054585C + HEX 6064676B6F73777B + HEX 7F83878B8F93979B + HEX 9FA3A7ABAFB3B7BB + HEX BFC3C7CBCFD3D7DB + HEX DFE3E7EBEFF3F7FB +* +C1125 HEX 0004080C1014181B + HEX 1F23272B2F33373B + HEX 3F43474B4E52565A + HEX 5E62666A6E72767A + HEX 7E8185898D919599 + HEX 9DA1A5A9ADB1B4B8 + HEX BCC0C4C8CCD0D4D8 + HEX DCE0E4E7EBEFF3F7 +* +C225 HEX 0004070B0F12161A + HEX 1E2125292C303437 + HEX 3B3F43464A4E5155 + HEX 595C6064676B6F73 + HEX 767A7E8185898C90 + HEX 94989B9FA3A6AAAE + HEX B1B5B9BCC0C4C8CB + HEX CFD3D6DADEE1E5E9 +* +C45 HEX 000306080B0E1114 + HEX 17191C1F2225282A + HEX 2D303336393B3E41 + HEX 44474A4C4F525558 + HEX 5B5D606366696B6E + HEX 7174777A7C7F8285 + HEX 888B8D909396999C + HEX 9EA1A4A7AAADAFB2 +* +C675 HEX 000203050608090B + HEX 0C0E0F1112141517 + HEX 181A1C1D1F202223 + HEX 252628292B2C2E2F + HEX 3133343637393A3C + HEX 3D3F404243454648 + HEX 494B4D4E50515354 + HEX 5657595A5C5D5F60 +* +C7875 HEX 0001020203040505 + HEX 06070809090A0B0C + HEX 0C0D0E0F10101112 + HEX 1314141516171718 + HEX 191A1B1B1C1D1E1E + HEX 1F20212222232425 + HEX 2526272829292A2B + HEX 2C2C2D2E2F303031 +* +C84375 HEX 0000010102020203 + HEX 0304040405050506 + HEX 0607070708080909 + HEX 090A0A0B0B0B0C0C + HEX 0D0D0D0E0E0F0F0F + HEX 1010101111121212 + HEX 1313141414151516 + HEX 1616171718181819 +* +LAUNCHRUN BIT BTN0 + BMI LNCHRUN4 +* + LDA PDL1 + LSR + LSR + LSR + LSR + LSR + LDY #8 + CMP (LB),Y + BCC LNCHRUN2 + BEQ LNCHRUN3 + LDA (LB),Y + CMP #5 + BCS LNCHRUN3 + JMP ADVANCE +LNCHRUN2 JMP RETREAT +LNCHRUN3 RTS +* +LNCHRUN4 LDY #8 + LDA (LB),Y + BEQ LNCHRUN3 + JMP RETREAT +* +LAUNCHHIT LDA BTN0 + BPL LNCHHIT2 + LDA Y2 + LDY #2 + CMP (B2),Y + BCS LNCHHIT2 + LDA PDL1 + LSR + LSR + STA BDY ;0-3F +NULLBOUNCE CLC +NULL RTS +LNCHHIT2 JMP PBOUNCE +* +* RUN THE FLIPPERS +* +LFLIP2RUN LDA #8 + BNE LFLIPRUN2 +RFLIP2RUN LDA #8 + BNE RFLIPRUN2 +LFLIPRUN LDA #0 +LFLIPRUN2 LDX #0 + BEQ FLIPRUN +RFLIPRUN LDA #0 +RFLIPRUN2 LDX #1 +* +FLIPRUN STA T +* + LDY #8 + LDA (LB),Y +* + LDY BTN0,X + BPL FLPRUN3 + CMP #7 + BCS FLPRUN2 +* + ADC T + STA XT + TAX + LDY #2 + LDA (LB),Y + CLC + ADC FXDVERT+1,X + STA (LB),Y + LDY #5 + LDA FXHEIGHT+1,X + STA (LB),Y + JSR ADVANCE + LDX XT + LDY #7 + LDA FXLEN+1,X + STA (LB),Y + RTS +* +FLPRUN2 RTS +* +FLPRUN3 CMP #0 + BEQ FLPRUN2 + LDY BTN0,X + BMI FLPRUN2 +* +FLPRUN4 CLC + ADC T + STA XT + TAX + LDY #7 + LDA FXLEN-1,X + STA (LB),Y + JSR RETREAT + LDX XT + LDY #2 + LDA (LB),Y + SEC + SBC FXDVERT,X ;WEIRD + STA (LB),Y + LDY #5 + LDA FXHEIGHT-1,X + STA (LB),Y + RTS +* +FLIP2INIT LDA #8 + BNE FLIPINIT2 +FLIPINIT LDA #0 +FLIPINIT2 STA T +FLIPINIT3 LDY #8 + LDA (LB),Y + BEQ FLPRUN2 + JSR FLPRUN4 + JMP FLIPINIT3 +* +FXDVERT HEX 000002FFFF00FEFE + HEX 0002FFFF0000FFFF +FXHEIGHT HEX 0C0C080807060808 + HEX 0806060605040506 +FXLEN HEX 2424181815121818 + HEX 100C0C0C0A080A0C +FDDVERT HEX 0000FEFF00000000 + HEX 000000000000FFFF +FHEIGHT HEX 0B09080605040608 + HEX 0706050403030405 +FTHETA HEX 04030201001F1E1D + HEX 04030201001F1E1D +* +FTBLO DA FFRAME1 + DA >FFRAME2 + DA >FFRAME3 + DA >FFRAME4 + DA >FFRAME5 + DA >FFRAME6 + DA >FFRAME7 + DA >FFRAME8 +* + DA >SFRAME1 + DA >SFRAME2 + DA >SFRAME3 + DA >SFRAME4 + DA >SFRAME5 + DA >SFRAME6 + DA >SFRAME7 + DA >SFRAME8 +* +LFLIP2HIT LDA #8 + BNE LFLIPHIT2 +LFLIPHIT LDA #0 +LFLIPHIT2 STA T + LDX BTN0 + LDA #0 + BEQ FLIPHIT +RFLIP2HIT LDX #13 + LDA #8 + BNE RFLIPHIT2 +RFLIPHIT LDX #19 + LDA #0 +RFLIPHIT2 STX FWIDTH + STA T + LDX BTN1 + LDA #$80 +FLIPHIT STX FDIR + STA FLIPR +* + BIT BMOVE + BMI FLIPH4 + BVS FLIPH2 + LDY Y1 + DEY + BVC FLIPH3 +FLIPH2 LDY Y2 + INY +FLIPH3 LDA X1 + STA FX1 + LDA X2 + STA FX2 + BNE FLIPH8 +* +FLIPH4 BVS FLIPH5 + LDY X1 + DEY + LDX X2 + DEX + BVC FLIPH6 +FLIPH5 LDY X1 + INY + LDX X2 + INX +FLIPH6 STY FX1 + STX FX2 + BIT BDY + BMI FLIPH7 + LDY Y2 + INY + BNE FLIPH8 +FLIPH7 LDY Y1 + DEY +FLIPH8 STY YT +* + LDY #8 + LDA (B2),Y + STA FRAME + CLC + ADC T + TAX + LDY #2 + LDA (B2),Y + CLC + ADC FDDVERT,X + STA T + CMP YT + BCC *+4 + BNE FLIPHOUT + CLC + ADC FHEIGHT,X + CMP YT + BCC FLIPHOUT +* + DEC B2+1 + LDY #$FB + LDA (B2),Y + STA LEFTX + INC B2+1 +* + LDA FTBLO,X + STA B3 + LDA FTBHI,X + STA B3+1 + LDA YT + SBC T ;C=1 + ASL + TAY +* + BIT FLIPR + BMI RFLIPH9 +* + LDA (B3),Y + ADC LEFTX ;C=0 + CMP FX2 + BCC *+4 + BNE FLIPHOUT + INY + LDA (B3),Y + CLC + ADC LEFTX + CMP FX1 + BCC FLIPHOUT +* + STA T + LDA FX2 + SBC LEFTX + STA YT + LDA FTHETA,X + STA THETA +* + BIT BMOVE + BMI LFLIPH10 + BVS FLIPH10 + BVC FLIPH12 +LFLIPH10 LDA T + CMP FX2 + BCC FLIPH10 + BCS FLIPH12 +* +FLIPHOUT CLC + RTS +* +RFLIPH9 LDA FWIDTH + SEC + INY + SBC (B3),Y + ADC LEFTX ;C=0 + CMP FX2 + BCC *+4 + BNE FLIPHOUT + DEY + LDA FWIDTH + SEC + SBC (B3),Y + CLC + ADC LEFTX + CMP FX1 + BCC FLIPHOUT +* + STA T + LDA FWIDTH + SBC FX1 ;C=1 + CLC + ADC LEFTX + STA YT + LDA #32 + SEC + SBC FTHETA,X + STA THETA +* + BIT BMOVE + BMI RFLIPH10 + BVS FLIPH10 + BVC FLIPH12 +RFLIPH10 LDA T + CMP FX2 + BCC FLIPH12 + BCS FLIPH10 +* +FLIPH9 LDA FRAME + CMP #5 + BCS FLIPH12 +FLIPH10 LDX #$00 + LDA THETA + BPL FLIPH13 +FLIPH11 LDA FRAME + CMP #5 + BCS FLIPH10 +FLIPH12 LDX #$80 + LDA #16 + CLC + ADC THETA + CMP #32 + BCC *+4 + SBC #32 + STA THETA +* +FLIPH13 LDY YT + LDA FLPVCTR,Y + LDY FRAME + BEQ FLIPH16 + CPY #7 + BEQ FLIPH16 + BIT FDIR + BMI FLIPH15 + CPX #$80 + BNE FLIPH16 + EOR #$FF + CLC + ADC #1 + JMP FLIPH17 +FLIPH15 CPX #$80 + BNE FLIPH17 +FLIPH16 LDA #0 +FLIPH17 STA KICK +* + LDA #0 + STA BCODE + JSR BOUNCE + JMP PUTSP +* +FLPVCTR HEX 0101010104080C101418 + HEX 2024282C3034383C3F3F +* +FFRAME1 HEX 0206010701080109020A030B + HEX 050C070D090E0B0F0D100F10 +* +FFRAME2 HEX 020501070108010A020B040D + HEX 060E09100C110F11 +* +FFRAME3 HEX 020501070109010B020D040F + HEX 07110A120E12 +* +FFRAME4 HEX 02050108010B010E02110513 + HEX 0A13 +* +FFRAME5 HEX 0207010B010F011202130413 +* +FFRAME6 HEX 041302130112010F010B0207 +* +FFRAME7 HEX 0B1305130211010E010B0108 + HEX 0205 +* +FFRAME8 HEX 0E120A120711040F020D010B + HEX 010901070205 +* +SFRAME1 HEX 02050106010702080309050A + HEX 070B090B +* +SFRAME2 HEX 0205010601080209040B060C + HEX 090C +* +SFRAME3 HEX 020501070109020B040C070C +* +SFRAME4 HEX 02060109010C020D060D +* +SFRAME5 HEX 0208010B010D020D +* +SFRAME6 HEX 020D010D010B0208 +* +SFRAME7 HEX 060D020D010C01090206 +* +SFRAME8 HEX 070C040C020B010901070205 +* +INITBALL BIT INITMODE + BPL INITB2 + LDA LB + LDX LB+1 + JSR XOFFDRAW + LDY #16 + LDA (LB),Y + BMI INITB3 +DRAWBALL LDY #18 + LDA (LB),Y + STA IBALL+2 + DEY + LDA (LB),Y + TAX + LDA DIV7,X + STA IBALL+3 + LDA MOD7,X + STA IBALL+4 + LDA #IBALL + JMP XOFFDRAW +* +IBALL DA *+7 + HEX 00,00,00,05,01 + HEX 0E,1F,1F,1F,0E +* +INITB2 LDY #2 + LDA (LB),Y + LDY #18 + STA (LB),Y + DEC LB+1 + LDY #$FB + LDA (LB),Y + INC LB+1 + LDY #17 + STA (LB),Y + LDA #0 + LDY #7 + STA (LB),Y + LDY #16 + STA (LB),Y + LDY #19 + STA (LB),Y + INY + LDA #$FF + STA (LB),Y +INITB3 RTS +* +BUMPRUN LDY #8 + LDA (LB),Y + BPL BMPRUN2 + LDA #0 + STA (LB),Y + JMP ADVANCE +BMPRUN2 BEQ BMPRUN3 + JMP RETREAT +BMPRUN3 RTS +* +TSET LDY #8 + LDA (B2),Y + BNE TSET2 + LDA #$80 + STA (B2),Y +TSET2 RTS +* +WMOD3 EQU * +WKICK HEX 10 +* +BUMPHIT JSR TSET + LDA WKICK + STA KICK + LDA #$80 + STA BCODE + JSR BOUNCE + JMP PUTSP +* +BUMPINIT LDY #8 + LDA (LB),Y + BMI BUMPINT2 + JMP INITB +BUMPINT2 AND #$7F + STA (LB),Y + JMP INITB +* +KICKHIT LDA THETA + CMP #4 + BEQ BUMPHIT + CMP #28 + BEQ BUMPHIT + JMP PBOUNCE +* +KNOCKRUN LDY #8 + LDA (LB),Y + BPL KNKRUN3 + CMP #$82 + BEQ KNKRUN2 + JMP ADVANCE +KNKRUN2 LDA #2 + STA (LB),Y + RTS +KNKRUN3 BEQ KNKRUN4 + JMP RETREAT +KNKRUN4 RTS +* +KNOCK1HIT BIT BMOVE + BMI KNK1HIT5 + BVC KNK1HIT2 + LDA WKICK + BNE KNK1HIT3 +KNK1HIT2 LDA WKICK + EOR #$FF +KNK1HIT3 STA BDY +KNK1HIT4 JSR TSET + SEC + JMP PUTSP +KNK1HIT5 JMP PBOUNCE +* +KNOCK2HIT BIT BMOVE + BPL KNK1HIT5 + BVS KNK2HIT2 + LDA WKICK + BNE KNK2HIT3 +KNK2HIT2 LDA WKICK + EOR #$FF +KNK2HIT3 STA BDX + BNE KNK1HIT4 +* +FLASHRUN LDY #8 + LDA (LB),Y + BPL FLSHRUN2 + CMP #$80 + BNE FLSHRUN3 + JMP ADVANCE +FLSHRUN2 BEQ FLSHRUN4 +FLSHRUN3 JMP RETREAT +FLSHRUN4 RTS +* +FLASHHIT JSR TSET + JSR PBOUNCE + JMP PUTSP +* +ROLLHIT JSR TSET + CLC + JMP PUTSP2 +* +GATEHIT BIT BMOVE + BMI GATEH2 + BVC GATEH3 +GATEH2 JSR PBOUNCE + JMP PUTSP +GATEH3 CLC + RTS +GATE2HIT BIT BDX + BMI GATEH2 + CLC + RTS +GATE3HIT BIT BDX + BPL GATEH2 + CLC + RTS +* +DROP1RUN LDX #$00 + BEQ DROPRUN +DROP2RUN LDX #$80 +DROPRUN STX T2 + LDY #8 + LDA (LB),Y + AND #$0F + CMP #$0F + BEQ DROPRUN4 + EOR #$0F + LDY #16 + AND (LB),Y + TAX + LDY #8 + ORA (LB),Y + STA (LB),Y + TXA +* + LDX #3 +DROPRUN2 LSR + BCC DROPRUN3 + JSR DRAWTARG +DROPRUN3 DEX + BPL DROPRUN2 + RTS +* +DROPRUN4 LDX #3 +DROPRUN5 JSR DRAWTARG + DEX + BPL DROPRUN5 + LDA #$80 +DROPRUN6 LDY #8 + STA (LB),Y + LDA #0 + LDY #16 + STA (LB),Y + RTS +* +DRAWTARG STA T + STX XT + TXA + ASL + ASL + ASL + BIT T2 + BMI DRAWTRG2 +* + DEC LB+1 + LDY #$FB + CLC + ADC (LB),Y + TAX + LDA DIV7,X + STA DROPTXB+3 + LDA MOD7,X + STA DROPTXB+4 + INC LB+1 + LDY #2 + LDA (LB),Y + STA DROPTXB+2 + LDA #DROPTXB + BNE DRAWTRG3 +* +DRAWTRG2 LDY #2 + CLC + ADC (LB),Y + STA DROPTYB+2 + DEC LB+1 + LDY #$FB + LDA (LB),Y + TAX + INC LB+1 + LDA DIV7,X + STA DROPTYB+3 + LDA MOD7,X + STA DROPTYB+4 + LDA #DROPTYB +* +DRAWTRG3 JSR XOFFDRAW + LDA T + LDX XT + RTS +* +DROPTXB DA *+7 + HEX 00,00,00,03,01 + HEX 00,2A,2A +* +DROPTYB DA *+7 + HEX 00,00,00,07,01 + HEX 00,05,05,05,05,05,05 +* +DROP1HIT DEC B2+1 + LDY #$FB + LDA X2 + SEC + SBC (B2),Y + INC B2+1 +* + LDX #3 + LDY #1 + STY T +DROP1HIT2 CMP DHITTBL,X + BCS DROP1HIT4 + ASL T +DROP1HIT3 DEX + BPL DROP1HIT2 + RTS +* +DROP1HIT4 LDY #16 + LDA (B2),Y + ORA T + STA (B2),Y +DROP1HIT5 JSR PBOUNCE + JMP PUTSP +* +DHITTBL HEX 02,0A,12,1A +* +DROP2HIT LDY #2 + LDA Y2 + SEC + SBC (B2),Y +* + LDX #3 + LDY #1 + STY T +DROP2HIT2 CMP DHITTBL,X + BCS DROP2HIT4 + ASL T +DROP2HIT3 DEX + BPL DROP2HIT2 + RTS +* +DROP2HIT4 LDY #16 + LDA (B2),Y + ORA T + STA (B2),Y + BPL DROP1HIT5 +* +DROP1INIT LDX #$00 + BEQ DROPINIT +DROP2INIT LDX #$80 +DROPINIT STX T2 + LDY #8 + LDA (LB),Y + AND #$0F + LDX #3 +DROPINIT2 LSR + BCC DROPINIT3 + JSR DRAWTARG +DROPINIT3 DEX + BPL DROPINIT2 + LDA #0 + JMP DROPRUN6 +* +CATCH1HIT BIT BMOVE + BMI CTCH1HIT3 + BVC CTCH1HIT3 +* + DEC B2+1 + LDY #$F9 + LDA (B2),Y + INC B2+1 + CLC + ADC #3 + CMP X1 + BNE CTCH1HIT3 +* + LDY #2 + LDA (B2),Y + STA YT + LDY #16 + LDA (B2),Y + STA T + BMI CTCH1HIT4 +* + BIT BST + BVS CTCH1HIT5 +* + ORA #$80 + STA (B2),Y + LDA #0 + STA BDX + LDA #$20 + STA BST + JSR PUTSP2 +CTCH1HIT2 CLC + RTS +* +CTCH1HIT3 LDA THETA + BNE *+12 + LDA #1 + BCS *+4 + LDA #$FF + STA BDX + SEC + RTS + JMP PBOUNCE +* +CTCH1HIT4 ROL + BMI CTCH1HIT6 +* + LDA BST + AND #$20 + BEQ CTCH1HIT5 +* + LDA T + AND #$7F + TAX + LDA YT + ADC CATCHSTOP,X ;C=1 + CMP Y2 + BNE CTCH1HIT2 + INC T + LDA T + AND #$7F + LDX #$40 + CMP #3 + BNE *+6 + LDX #0 + LDA #$C2 + LDY #16 + STA (B2),Y + STX BST +CTCH1HIT5 SEC + RTS +* +CTCH1HIT6 LDA YT + CLC + ADC #16 + CMP Y2 + BNE CTCH1HIT2 + BIT BST + BVC CTCH1HIT2 + DEC T + LDA T + CMP #$C0 + BNE *+12 + LDA #$00 + LDY #8 + STA (B2),Y + LDY #16 + LDA #0 +* + STA (B2),Y + LDA #0 + STA BST + CLC + RTS +* +CATCHSTOP HEX 03,09,0F +* +CATCH1INIT LDA #0 + LDY #8 + STA (LB),Y + LDY #16 + STA (LB),Y + RTS +* +CATCH2RUN LDY #8 + LDA (LB),Y + BPL CTCH2RUN3 + CMP #$84 + BEQ CTCH2RUN2 + JMP ADVANCE +CTCH2RUN2 LDA #0 + STA (LB),Y + LDY #0 + LDA #CATCH2B + INY + STA (LB),Y +CTCH2RUN3 RTS +* +CATCH2HIT JSR TSET + LDA #$80 + STA BST + SEC + JMP PUTSP +* +SPINRUN JSR KNOCKRUN + LDY #8 + LDA (LB),Y + BNE SPINRUN4 + LDY #16 + LDA (LB),Y + BEQ SPINRUN4 + SEC + SBC #1 + STA (LB),Y + LDA #$80 + LDY #8 + STA (LB),Y + INC DSCORE + BNE *+6 + LDA #255 + STA DSCORE +SPINRUN4 RTS +* +SPININIT LDA #0 + LDY #16 + STA (LB),Y + JMP BUMPINIT +* +SPINHIT LDA BDY + BPL *+4 + EOR #$FF + LSR + LDY #16 + STA (B2),Y + JSR TSET + CLC + JMP PUTSP2 +* +MAGHIT BIT BMOVE + BMI MAGHIT2 + BVS MAGHIT2 + SEC + RTS +MAGHIT2 JSR PBOUNCE + JMP PUTSP +* +CTBL1LO DA C05625 + DA >C1125 + DA >C225 + DA >C45 + DA >C675 + DA >C7875 + DA >C84375 +* +CTBL2LO DA C84375 + DA >C7875 + DA >C675 + DA >C45 + DA >C225 + DA >C1125 + DA >C05625 +* +ROTATE STA T + LSR + LSR + LSR + STA XT +* + TXA + BPL ROT3 + TYA + BPL ROT2 + JSR QUAD2 + LDA #2 + BNE ROT5 +ROT2 JSR QUAD3 + LDA #1 + BNE ROT5 +ROT3 TYA + BPL ROT4 + JSR QUAD1 + LDA #3 + BPL ROT5 +ROT4 LDA #0 +ROT5 CLC + ADC XT + CMP #4 + BCC *+4 + SBC #4 + PHA +* +ROT6 CPY #$40 + BCC *+4 + LDY #$3F + CPX #$40 + BCC *+4 + LDX #$3F +* + LDA T + AND #$07 + BEQ ROT7 + STX XT + TAX + LDA CTBL1LO-1,X + STA RMOD1 + STA RMOD2 + LDA CTBL1HI-1,X + STA RMOD1+1 + STA RMOD2+1 + LDA CTBL2LO-1,X + STA RMOD3 + STA RMOD4 + LDA CTBL2HI-1,X + STA RMOD3+1 + STA RMOD4+1 +* + LDX XT +RMOD1 EQU *+1 + LDA C225,X + SEC +RMOD3 EQU *+1 + SBC C225,Y + PHP + ROR + PLP + ROR + EOR #$C0 + STA T +* +RMOD4 EQU *+1 + LDA C225,X + CLC +RMOD2 EQU *+1 + ADC C225,Y + ROR + BPL *+4 + LDA #$7F + LSR + TAY + LDX T +* +ROT7 PLA +* +FIXQUAD ROR + ROR + BCS FIXQ3 + BMI FIXQ2 +QUAD0 RTS +QUAD1 EQU * +FIXQ2 STX YT + TYA + EOR #$FF + CLC + ADC #1 + TAX + LDY YT + RTS +* +FIXQ3 BMI FIXQ4 +QUAD2 TXA + EOR #$FF + CLC + ADC #1 + TAX + TYA + JMP FIXQ5 +* +QUAD3 EQU * +FIXQ4 STY YT + TXA + LDX YT +FIXQ5 EOR #$FF + CLC + ADC #1 + TAY + RTS +* +PBOUNCE LDA #0 + STA KICK + STA BCODE +BOUNCE LDY BDY + LDX BDX + LDA THETA + JSR ROTATE +* + TYA + BPL BOUNCE3 + EOR #$FF + CLC + ADC #1 + TAY +* + BIT BCODE + BMI BOUNCE2 +WMOD2 EQU *+1 + LDA C675,Y + LSR + LSR + BNE *+4 + LDA #1 +BOUNCE2 CLC + ADC KICK + BMI *+8 + CMP #$40 + BCC *+4 + LDA #$3F + TAY +* + LDA #32 + SEC + SBC THETA + JSR ROTATE + STX BDX + STY BDY +BOUNCE3 SEC + RTS +* +ADVANCE LDY #7 + LDA (LB),Y + CLC + LDY #0 + ADC (LB),Y + STA (LB),Y + INY + LDA (LB),Y + ADC #0 + STA (LB),Y + LDY #8 + LDA (LB),Y + ADC #1 + STA (LB),Y + LDA LB + LDX LB+1 + JMP XOFFDRAW +* +RETREAT LDA LB + LDX LB+1 + JSR XOFFDRAW + LDY #0 + LDA (LB),Y + SEC + LDY #7 + SBC (LB),Y + LDY #0 + STA (LB),Y + INY + LDA (LB),Y + SBC #0 + STA (LB),Y + LDY #8 + LDA (LB),Y + SBC #1 + STA (LB),Y + RTS +* +INITB LDY #8 + LDA (LB),Y + BEQ INITQUIT + JSR RETREAT + BCS INITB +INITQUIT RTS +* +PUTSP BCC PUTSP4 +PUTSP2 PHP + LDY #9 + LDA (B2),Y + AND #$0F + TAX + LDA SCORETBL,X + CLC + ADC DSCORE + BCC *+4 + LDA #255 + STA DSCORE +* + LDA (B2),Y + LSR + LSR + LSR + LSR + BEQ PUTSP3 + TAX + LDA SNDTBL-1,X + JSR DOSND +PUTSP3 PLP +PUTSP4 RTS +* +DOSND CMP SERIES + BMI DOS2 + STA SERIES + LDA #0 + STA SLICE +DOS2 RTS +* +SCORETBL HEX 0001020304050A0F14191E28324B6496 +SNDTBL HEX 00040C1424384C +* +MOVEBALL LDY #16 + LDA (LB),Y + BMI INITQUIT + STA BST + INY + LDA (LB),Y + TAX + STA X1 + CLC + ADC #4 + STA X2 + SBC #1 ;-2, C=0 + STA MIDX + LDA DIV7,X + STA HBALL+3 + STA VBALL+3 + LDA MOD7,X + STA HBALL+4 + STA VBALL+4 +* + INY + LDA (LB),Y + STA HBALL+2 + STA VBALL+2 + STA Y1 + CLC + ADC #4 + STA Y2 +* + INY + LDA (LB),Y + STA BDX + INY + LDA (LB),Y + STA BDY + INY + LDA (LB),Y + STA BXACC + INY + LDA (LB),Y + STA BYACC +* + LDA BXACC + CLC + ADC BDX + STA BXACC + LDA BYACC + CLC + ADC BDY + STA BYACC +* + LDA #0 + STA HTCNT +* + LDA PTM1 +WMOD4 EQU *+1 + AND #$07 + BNE MOVEB2 + LDY BDY + DEY + BPL GRAV2 + CPY #$D1 + BCS GRAV2 + LDY #$D1 +GRAV2 STY BDY +* +MOVEB2 BIT BST + BPL *+5 + JMP MOVEB9 + LDA BYACC + BMI MOVEB3 + CMP #$20 + BCS MOVEB4 + LDA BXACC + BMI MOVEB7 + CMP #$20 + BCS MOVEB6 + JMP MOVEB9 +* +MOVEB3 CLC + ADC #$20 + STA BYACC + LDY Y2 + INY + LDA #$40 + STA BMOVE + JSR CHECKVERT + BCS MOVEB5 +* + JSR BALLDOWN + JMP MOVEB5 +* +MOVEB4 SBC #$20 + STA BYACC + LDY Y1 + DEY + LDA #$00 + STA BMOVE + JSR CHECKVERT + BCS MOVEB5 +* + JSR BALLUP +* +MOVEB5 BIT BST + BMI MOVEB9 + LDA BXACC + BMI MOVEB7 + CMP #$20 + BCC MOVEB2 +* +MOVEB6 SBC #$20 + STA BXACC + LDA #$C0 + STA BMOVE + LDY Y1 + LDA X2 + ADC #0 ;C=1 + JSR CHECKHORIZ + BCS MOVEB8 +* + LDY Y2 + LDA X2 + ADC #1 ;C=0 + JSR CHECKHORIZ + BCS MOVEB8 +* + JSR BALLRIGHT + JMP MOVEB2 +* +MOVEB7 CLC + ADC #$20 + STA BXACC + LDA #$80 + STA BMOVE + LDY Y1 + LDA X1 + SEC + SBC #1 + JSR CHECKHORIZ + BCS MOVEB8 +* + LDY Y2 + LDA X1 + SBC #0 ;C=0! + JSR CHECKHORIZ + BCS MOVEB8 +* + JSR BALLLEFT +* +MOVEB8 JMP MOVEB2 +* +MOVEB9 LDY #7 + LDA (LB),Y + CLC + ADC #1 + LDX HTCNT + BNE MOVEB10 + CMP #3 + BCC MOVEB11 +* + LDY Y2 + INY + LDA #$40 + STA BMOVE + JSR CHECKVERT +MOVEB10 LDA #0 +MOVEB11 LDY #7 + STA (LB),Y +* + LDY #16 + LDA BST + STA (LB),Y + INY + LDA X1 + STA (LB),Y + INY + LDA Y1 + STA (LB),Y + INY + LDA BDX + STA (LB),Y + INY + LDA BDY + STA (LB),Y + INY + LDA BXACC + STA (LB),Y + INY + LDA BYACC + STA (LB),Y + BIT BST + BPL *+5 + JMP DRAWBALL + RTS +* +DOHIT INC HTCNT + STY HT + LDY OBJID + LDA VHI,Y + BNE DOHIT2 + JSR PBOUNCE + JMP DOHIT3 +* +DOHIT2 STA B2+1 + LDA VLO,Y + STA B2 + LDY #14 + LDA (B2),Y + STA BMOD1 + INY + LDA (B2),Y + STA BMOD1+1 +BMOD1 EQU *+1 + JSR $FFFF +DOHIT3 LDA HVAL + LDY HT + RTS +* +CHECKHORIZ STA HVAL + LDA PBTBLO,Y + STA B1 + LDA PBTBHI,Y + STA B1+1 + LDA PBDX,Y + STA HCNT + LDA HVAL +* + LDY #0 +CHECKHZ2 CMP (B1),Y + BNE CHECKHZ3 + JSR HITLEFT + BCC CHECKHZ7 + BCS FIXLEFT +CHECKHZ3 INY + INY + BCC CHECKHZ6 + CMP (B1),Y + BCC CHECKHZ5 + BNE CHECKHZ6 +CHECKHZ4 JSR HITRIGHT + BCC CHECKHZ7 + BCS FIXRIGHT +CHECKHZ5 DEY + LDA (B1),Y + INY + TAX + BNE CHECKHZ4 + LDA HVAL +* +CHECKHZ6 INY +CHECKHZ7 INY + CPY HCNT + BNE CHECKHZ2 + CLC + RTS +* +HITLEFT INY + LDA (B1),Y + STA OBJID + INY + INY + LDA (B1),Y + AND #$0F + STA THETA +* + LDA OBJID + BNE HIT3 +HIT2 LDA #16 + BNE HIT4 +HIT3 LDA #32 +HIT4 SEC + SBC THETA + STA THETA + JMP DOHIT +* +HITRIGHT DEY + LDA (B1),Y + STA OBJID + INY + INY + LDA (B1),Y + LSR + LSR + LSR + LSR + STA THETA +* + LDA OBJID + BNE HIT2 + BEQ HIT3 +* +FIXLEFT LDA BDX + BNE FIX4 + LDA OBJID + BNE FIX3 +FIX2 INC BDX + BNE FIX4 +FIX3 DEC BDX +FIX4 LDA BXACC + AND #$1F + STA BXACC + RTS +* +FIXRIGHT LDA BDX + BNE FIX4 + LDA OBJID + BNE FIX2 + BEQ FIX3 +* +OFFBOARD LDA #0 + BIT BMOVE + BVS *+4 + LDA #16 + STA THETA + JMP PBOUNCE +* +CHECKVERT LDA PBTBLO,Y + STA B1 + LDA PBTBHI,Y + STA B1+1 + LDA PBDX,Y + BEQ OFFBOARD + STA HCNT + LDY #1 +* +PCHECKV2 DEY +PCHECKV LDA (B1),Y + TAX + INY + LDA (B1),Y + STA OBJID + BEQ BCHECKV2 +* + CPX X2 + BCC *+4 + BNE PCHKV2 + STX P1 + INY + LDA (B1),Y + CMP X1 + BCC PCHKV3 +* + STA P2 + INY + LDA (B1),Y + STA LFT + LSR + LSR + LSR + LSR + STA RTT + JSR DOVHIT + BCC PCHKV4 +CHKVRT2 LDA BYACC + AND #$1F + STA BYACC + RTS +* +PCHKV2 INY +PCHKV3 INY +PCHKV4 INY + CPY HCNT + BNE PCHECKV + CLC + RTS +* +BCHECKV2 LDA #0 + STA P1 + LDA #8 + STA LFT + BNE BCHKV2 +* +BCHECKV LDA (B1),Y + TAX + INY + LDA (B1),Y + BNE BCHKV4 + STA OBJID +* +BCHKV2 LDA X2 + CMP P1 + BCC BCHKV3 + CPX X1 + BCC BCHKV3 +* + STX P2 + INY + INY + LDA (B1),Y + AND #$0F + STA RTT + DEY + DEY + JSR DOVHIT + BCS CHKVRT2 +* +BCHKV3 INY + LDA (B1),Y + STA P1 + INY + LDA (B1),Y + LSR + LSR + LSR + LSR + STA LFT + INY + CPY HCNT + BNE BCHECKV +* +BCHKV4 LDA X2 + CMP P1 + BCC BCHKV5 +* + LDA #153 + STA P2 + LDA #8 + STA RTT + JSR DOVHIT + BCS CHKVRT2 +BCHKV5 CPY HCNT + BEQ *+5 + JMP PCHECKV2 + CLC + RTS +* +DOVHIT LDA P2 + CMP X1 + BEQ VRIGHT2 + CLC + ADC P1 + ROR + CLC + ADC #2 + CMP X2 + BCC VRIGHT +* + LDA LFT + AND #$0F + STA LFT + LDA P1 + CMP X2 + BEQ VLEFT2 +* +VLEFT LDA LFT + JSR VLFIX + STA LFT + BEQ VLEFT3 +VLEFT2 LDA #32 + SEC + SBC LFT +VLEFT3 STA THETA + JSR DOHIT + BCC VLEFT4 + LDA BDX + BNE VLEFT4 + DEC BDX +VLEFT4 RTS +* +VRIGHT LDA RTT + JSR VRFIX + STA RTT + BEQ VRIGHT3 +VRIGHT2 LDA #16 + SEC + SBC RTT +VRIGHT3 STA THETA + JSR DOHIT + BCC VRIGHT4 + LDA BDX + BNE VRIGHT4 + INC BDX +VRIGHT4 RTS +* +VLFIX BIT BMOVE + BVC VLFIX3 +VLFIX2 CMP #6 + BCC VFIX3 + BCS VFIX2 +VLFIX3 CMP #11 + BCS VFIX3 + BCC VFIX2 +VRFIX BIT BMOVE + BVC VLFIX2 + BVS VLFIX3 +* +VFIX2 LDA #16 + BIT BMOVE ;Z=1 + BVC *+4 + LDA #0 ;Z=1 +VFIX3 RTS +* +BALLDOWN LDA #VBALL + JSR XOFFDRAW + INC Y1 + INC Y2 + LDA Y1 + STA HBALL+2 + STA VBALL+2 + RTS +* +BALLUP DEC Y1 + DEC Y2 + LDA Y1 + STA HBALL+2 + STA VBALL+2 + LDA #VBALL + JMP XOFFDRAW +* +BALLRIGHT LDA X2 + CMP #153 + BCS BALLR2 + LDA #HBALL + JSR XOFFDRAW + INC X1 + INC X2 + LDY X1 + LDA DIV7,Y + STA HBALL+3 + STA VBALL+3 + LDA MOD7,Y + STA HBALL+4 + STA VBALL+4 +BALLR2 RTS +* +BALLLEFT LDA X1 + BEQ BALLR2 + DEC X1 + DEC X2 + LDY X1 + LDA DIV7,Y + STA HBALL+3 + STA VBALL+3 + LDA MOD7,Y + STA HBALL+4 + STA VBALL+4 + LDA #HBALL + JMP XOFFDRAW +* +HBALL DA *+7 + HEX 00,00,00,05,01 + HEX 12,21,21,21,12 +* +VBALL DA *+7 + HEX 00,00,00,06,01 + HEX 0E,11,00,00,11,0E +* +SCORE LDA #$B0 + STA CHAR+2 + LDY #SCORE1 + LDA DSCORE + JSR DOSCORE +* + LDA #$98 + STA CHAR+2 + LDA #BONUS + STA SCB+1 + LDA DBONUS + LDY #5 + JSR DOSCORE2 + LDA #0 + STA DSCORE + STA DBONUS + RTS +* +DOSCORE STY SCB + STX SCB+1 + LDY #7 +DOSCORE2 CLC + ADC (SCB),Y + BCC *+4 + LDA #255 + STA (SCB),Y +DOSCOR2 LDX #0 + LDA (SCB),Y +DOSCOR3 CMP #10 + BCC DOSCOR4 + SBC #10 + INX + BCS DOSCOR3 +DOSCOR4 STA (SCB),Y + TXA + DEY + ADC (SCB),Y + STA (SCB),Y + TYA + BNE DOSCOR2 + JMP PRSCORE2 +* +INITSCORE LDY #17 + LDA #0 + STA DSCORE + STA DBONUS + STA BMULT +INITSCR2 STA SCORE1,Y + DEY + BPL INITSCR2 +* + LDY #$80 + LDX #$18 + LDA #0 + JSR CHARTO + LDA #BMMSG + JSR PRINT + JSR PRBMULT + LDY #$B0 + LDX #$18 + LDA #0 + JSR CHARTO + LDA #P1MSG + JSR PRINT + LDY #SCORE1 + JSR PRSCORE + LDY #$98 + LDX #$18 + LDA #0 + JSR CHARTO + LDA #BMSG + JSR PRINT + LDY #BONUS +* +PRSCORE STY SCB + STX SCB+1 +* +PRSCORE2 LDY #0 + JSR SETMODE +* + LDY CHAR+2 + LDX #$27 + LDA #0 + JSR CHARTO +* + LDY #8 +PRSCR2 STY YT + LDA (SCB),Y + JSR PRCHAR + DEC CHAR+3 + LDA #0 + STA CHAR+4 + LDY YT + DEY + BNE PRSCR2 +* + LDY #2 + JMP SETMODE +* +PRBMULT LDY #0 + JSR SETMODE + LDY #$80 + LDX #$20 + LDA #0 + JSR CHARTO + LDX BMULT + INX + CPX #6 + BCS PRBMUL2 + STX BMULT + TXA + JSR PRCHAR +PRBMUL2 LDY #2 + JMP SETMODE +* +P1MSG HEX 19150A220E1B81 +BMSG HEX 0B18171E9C +BMMSG HEX 0B18171E1CA1 +* +SCORE1 HEX 000000000000000000 +BONUS HEX 000000000000000000 +* +SND BIT STGL + BMI SND5 + LDA SERIES + BMI SND5 +SND1 CLC + ADC SLICE + TAX + STX ST + LDY EFFECTS,X +SND2 LDX NOTES-12,Y + BEQ SND4 +SND3 PHA + PLA + DEX + BNE SND3 + LDA $C030 + INY + BNE SND2 +SND4 INC SLICE + LDX ST + LDA EFFECTS+1,X + BNE SND5 +* +INITSND LDY #$FF + STY SERIES + INY + STY SLICE +SND5 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 +* +WIRING LDX #0 +WIR2 LDA #0 + STA T + STX XT + JSR GETST + BPL WIR4 + INX + JSR GETST + BPL WIR4 + INX + JSR GETST + BPL WIR4 +* + INX + STX XT + LDA T + BEQ WIR4 + LDA LOGIC,X + STA YT + AND #$0F + TAY + LDA BONUSTBL,Y + CLC + ADC DBONUS + BCC *+4 + LDA #255 + STA DBONUS + LDA YT + BPL WIR3 +* + JSR PRBMULT +* +WIR3 LDA YT + AND #$70 + LSR + LSR + LSR + LSR + BEQ *+9 + TAX + LDA SNDTBL-1,X + JSR DOSND +* + DEC XT + JSR TURNOFF + DEC XT + JSR TURNOFF + DEC XT + JSR TURNOFF +* +WIR4 LDA XT + AND #$FC + CLC + ADC #4 + TAX + CPX #24 + BCC WIR2 + RTS +* +BONUSTBL HEX 000102030405060708090A141E283264 +* +GETST LDA LOGIC,X + BEQ GETS2 + INC T + TAY + LDA VLO,Y + STA B1 + LDA VHI,Y + STA B1+1 + LDY #8 + LDA (B1),Y + RTS +GETS2 LDA #$80 +GETS3 RTS +* +TURNOFF LDX XT + LDA LOGIC,X + BEQ GETS3 + TAY + LDA VLO,Y + STA LB + LDA VHI,Y + STA LB+1 + LDY #12 + LDA (LB),Y + STA TMOD1 + INY + LDA (LB),Y + STA TMOD1+1 +TMOD1 EQU *+1 + JMP $FFFF +* +INITWORLD LDX WSET + LDA GRAVTBL,X + STA WMOD4 + LDX WSET+1 + LDA TIMETBL,X + STA WMOD1 + LDX WSET+2 + LDA KICKTBL,X + STA WMOD3 + LDX WSET+3 + LDA ELASTLO,X + STA WMOD2 + LDA ELASTHI,X + STA WMOD2+1 + RTS +* +GRAVTBL HEX FF7F3F1F0F070301 +TIMETBL HEX 302018100C080401 +KICKTBL HEX 04080C1018202838 +ELASTLO HEX 80400000C0804000 +ELASTHI HEX 7878787877777777 +* +* PLAY THE GAME IN THE BUFFER +* +PLAY LDY #0 + STY RUNLEN + JSR GETOBJ +PLAY2 LDA OBJID + CMP #VALIDBUF + JSR READSECTORS +* + LDY #$40 +PCSIN2 LDA VALIDBUF,Y + CMP FIRSTBOOT,Y + BNE PCSIN3 + DEY + BPL PCSIN2 + RTS +* +PCSIN3 LDY #1 + JSR SETMODE + LDA #DIALOGBITS + JSR DRAWBITS + LDY #3 + JSR SETMODE + LDA #DIALOGBOX + JSR DRAWRECT + LDY #2 + JSR SETMODE + JSR FRAMERECT+3 +* + LDY #$59 + LDX #1 + LDA #0 + JSR CHARTO + LDA #INSERTMSG + JSR PRINT +* + STA $C010 +WAIT1 LDA $C000 + BPL WAIT1 + STA $C010 +* + LDY #0 + JSR SETMODE + LDA #DIALOGBITS + JSR DRAWBITS + LDY #2 + JSR SETMODE +* + JMP PCSINSERTED +* +INSERTMSG HEX 12171C0E1B1D24190C1C240D121C94 +* +DIALOGBITS DA $A000 + HEX 5700000B28 +* +DIALOGBOX HEX 5700000A2705 +* diff --git a/source_disc2/WIRE.S b/source_disc2/WIRE.S new file mode 100644 index 0000000..c097d57 --- /dev/null +++ b/source_disc2/WIRE.S @@ -0,0 +1,1149 @@ + 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 + JSR XOFFDRAW + LDA #PLIER + JSR XOFFDRAW + LDA #SCREWDRIVER + JSR XOFFDRAW + LDY #$38 + LDX #$24 + LDA #2 + JSR CHARTO + LDA #QUITMSG + JSR PRINT +* + LDA #1 +STRT2 STA ANDGATE+2 + LDA #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 + 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 + JSR INITCRSR +* +MAIN INC ETIMER + JSR SOUND + JSR JSCTRL + JSR UPDATECRSR + JSR GETBUTNS + BPL MAIN +* + LDA #TOOLB + JSR CRSRINRECT + BCC MAIN2 + LDA #0 + STA LASTITEM+1 + LDA #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 #HAND + LDY #0 +SETEDMODE STY EDITMODE + JMP INITCRSR +* +INITPLIER JSR XDRAWCRSR + LDA #PLIER + LDY #1 + BNE SETEDMODE +* +INITDRIVER JSR XDRAWCRSR + LDA #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 + 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 + 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 + JSR CRSRINRECT + BCC SOBJ4 +* + LDA CURNOISE + JSR HLNOISE + LDA #0 + STA LASTITEM+1 + LDA #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 + JSR CRSRINRECT + BCC SOBJ5 +* + LDA BMULT + BEQ SBON2 + LDA #BMULTBOX + JSR DRAWRECT +SBON2 LDA #0 + STA LASTITEM+1 + LDA #BMULTMENU + JSR DOMENU + BEQ SBON3 + LDA #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 + JSR CRSRINRECT + BCC SOBJ6 +* + LDA CURSCORE + JSR HLSCORE + LDA #0 + STA LASTITEM+1 + LDA #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 #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 + 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 + JMP DRAWRECT +* +HLSCORE BEQ HLSCR2 + TAY + LDA SCVERT-1,Y + STA SCBOX + LDA #SCBOX + JMP DRAWRECT +HLSCR2 RTS +* +SCVERT HEX 0C16202A343E48525C66707A848E98 +* +HLNOISE BEQ HLSCR2 + TAY + LDA NVERT-1,Y + STA NBOX + LDA #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 + 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 + JSR GETRECT + LDX Y2 + JSR HLINE +* + LDA #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 + 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 + 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 +* +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