diff --git a/artwork/shapes.asm b/artwork/shapes.asm index 88dcea6..63543b5 100644 --- a/artwork/shapes.asm +++ b/artwork/shapes.asm @@ -4,26 +4,41 @@ ; dno run dino_run_0 ; anly '0' jumps - .by $ff, $23, $27, $2b ; '. ' - .by $20, $24, $28, $2c ; ' ## ' - .by $21, $25, $29, $ff ; '## .' - .by $22, $26, $2a, $ff ; '## .' + .by $ff, $23, $27, $2b, $ff ; '. ' + .by $20, $24, $28, $2c, $ff ; ' ## ' + .by $21, $25, $29, $ff, $ff ; '## .' + .by $22, $26, $2a, $ff, $ff ; '## .' dino_run_1 - .by $ff, $23, $27, $2b ; '. ' - .by $20, $24, $28, $2c ; ' ## ' - .by $21, $25, $29, $ff ; '## .' - .by $2d, $2e, $2f, $ff ; '## .' + .by $ff, $23, $27, $2b, $ff ; '. ' + .by $20, $24, $28, $2c, $ff ; ' ## ' + .by $21, $25, $29, $ff, $ff ; '## .' + .by $2d, $2e, $2f, $ff, $ff ; '## .' dino_run_2 - .by $ff, $23, $27, $2b ; '. ' - .by $20, $24, $28, $2c ; ' ## ' - .by $21, $25, $29, $ff ; '## .' - .by $30, $31, $32, $ff ; '## .' + .by $ff, $23, $27, $2b, $ff ; '. ' + .by $20, $24, $28, $2c, $ff ; ' ## ' + .by $21, $25, $29, $ff, $ff ; '## .' + .by $30, $31, $32, $ff, $ff ; '## .' dino_crouch_1 + .by $ff, $ff, $ff, $ff, $ff + .by $ff, $ff, $ff, $ff, $ff .by $33, $34, $35, $36, $37 ; '#### ' .by $38, $39, $3a, $3b, $3c ; '#### ' dino_crouch_2 + .by $ff, $ff, $ff, $ff, $ff + .by $ff, $ff, $ff, $ff, $ff .by $33, $34, $35, $36, $37 ; '#### ' .by $3d, $3e, $3f, $3b, $3c ; '#### ' - +ShapesTableL + .by dino_run_0 + .by >dino_run_1 + .by >dino_run_2 + .by >dino_crouch_1 + .by >dino_crouch_2 .endif ; .IF *>0 diff --git a/dino.asm b/dino.asm new file mode 100644 index 0000000..df1f493 --- /dev/null +++ b/dino.asm @@ -0,0 +1,170 @@ + +; No internet +;--------------------------------------------------- + OPT r+ + +;--------------------------------------------------- +; Zpage variables + .zpvar temp_w .word = $80 +;--------------------------------------------------- + icl 'lib/ATARISYS.ASM' + icl 'lib/MACRO.ASM' +;--------------------------------------------------- + ; dark screean and BASIC off + ORG $2000 + mva #0 dmactls ; dark screen + mva #$ff portb + ; and wait one frame :) + seq:wait ; or waitRTC ? + mva #$ff portb ; BASIC off + rts + ini $2000 +;--------------------------------------------------- + + org $2000 +;--------------------------------------------------- +; 4 charsets for fine scroll +font1 + ins 'artwork/dino.fnt' ; first charset +font2 = font1+$400 +font3 = font2+$400 +font4 = font3+$400 + org font4+$400 +; screen data +; 8 lines 256bytes each +screen + org screen+($100*8) +; display list +GameDL + .byte $70,$70,$70,$70,$70 ; empty lines + .byte $02+$40+$10 ; gr.0+LMS+HSCRL +line1_addr + .word screen + .byte $02+$40+$10 ; gr.0+LMS+HSCRL +line2_addr + .word screen+$100 + .byte $02+$40+$10 ; gr.0+LMS+HSCRL +line3_addr + .word screen+$200 + .byte $02+$40+$10 ; gr.0+LMS+HSCRL +line4_addr + .word screen+$300 + .byte $02+$40+$10 ; gr.0+LMS+HSCRL +line5_addr + .word screen+$400 + .byte $02+$40+$10 ; gr.0+LMS+HSCRL +line6_addr + .word screen+$500 + .byte $02+$40+$10 ; gr.0+LMS+HSCRL +line7_addr + .word screen+$600 + .byte $02+$40+$10 ; gr.0+LMS+HSCRL +line8_addr + .word screen+$700 + .byte $41 ;JVB + .word GameDL + +;--------------------------------------------------- +FirstSTART + jsr GenerateCharsets + jsr SetGameScreen + ldx #5 ; position + ldy #0 ; shape + jsr ShowDino + ldx #10 ; position + ldy #1 ; shape + jsr ShowDino + ldx #15 ; position + ldy #2 ; shape + jsr ShowDino + ldx #20 ; position + ldy #3 ; shape + jsr ShowDino + ldx #25 ; position + ldy #4 ; shape + jsr ShowDino + + halt + rts + +;----------------------------------------------- +; Generation of character sets 2,3 and 4 of 1 +; By copying and horizontal shift dino +;----------------------------------------------- +.proc GenerateCharsets + ; copy charset 1 to 2,3 and 4 + ldy #0 +CopyLoop + lda font1,y + sta font2,y + sta font3,y + sta font4,y + lda font1+$100,y + sta font2+$100,y + sta font3+$100,y + sta font4+$100,y + lda font1+$200,y + sta font2+$200,y + sta font3+$200,y + sta font4+$200,y + lda font1+$300,y + sta font2+$300,y + sta font3+$300,y + sta font4+$300,y + iny + bne CopyLoop + ; and shifting dino shape + + rts +.endp + +;----------------------------------------------- +; Show Dino on screen (test) +; X - y position +; Y - shape nr +;----------------------------------------------- +.proc ShowDino + lda ShapesTableL,y + sta temp_w + lda ShapesTableH,y + sta temp_w+1 + ldy #0 +DinoLoop + lda (temp_w),y + bmi @+ + sta screen+$400,x +@ adw temp_w #5 + lda (temp_w),y + bmi @+ + sta screen+$500,x +@ adw temp_w #5 + lda (temp_w),y + bmi @+ + sta screen+$600,x +@ adw temp_w #5 + lda (temp_w),y + bmi @+ + sta screen+$700,x +@ sbw temp_w #15 + inx + iny + cpy #5 ; dino width + bne DinoLoop + rts +.endp +;----------------------------------------------- +; Generation of character sets 2,3 and 4 of 1 +; By copying and horizontal shift dino +;----------------------------------------------- +.proc SetGameScreen + mwa #GameDL dlptrs + lda #%00111110 ; normal screen width, DL on, P/M on + sta dmactls + mva #>font1 chbas + rts +.endp +;-------------------------------------------------- + icl 'artwork/shapes.asm' +;-------------------------------------------------- + + run FirstSTART diff --git a/dino.lab b/dino.lab new file mode 100644 index 0000000..45e76e6 --- /dev/null +++ b/dino.lab @@ -0,0 +1,607 @@ +mads 2.1.7 build 3 (13 Sep 23) +Label table: +00 E400 EDITRV +00 E410 SCRENV +00 E420 KEYBDV +00 E430 PRINTV +00 E440 CASETV +00 E450 DISKIV +00 E453 DSKINV +00 E456 CIOV +00 E459 SIOV +00 E45C SETVBV +00 E45F SYSVBV +00 E462 XITVBV +00 E465 SIOINV +00 E468 SENDEV +00 E46B INTINV +00 E46E CIOINV +00 E471 BLKBDV +00 E474 WARMSV +00 E477 COLDSV +00 E47A RBLOKV +00 E47D CSOPIV +00 E480 PUPDIV +00 E483 SLFTSV +00 E486 PHENTV +00 E489 PHULNV +00 E48C PHINIV +00 0003 _OPEN +00 0005 GETREC +00 0007 GETCHR +00 0009 PUTREC +00 000B PUTCHR +00 000C _CLOSE +00 000D STATIS +00 000E SPECIL +00 0011 DRAWLN +00 0012 FILLIN +00 0020 RENAME +00 0021 DELETE +00 0022 FORMAT +00 0023 LOCKFL +00 0024 UNLOCK +00 0025 POINT +00 0026 NOTE +00 00FF IOCFRE +00 0001 APPEND +00 0002 DIRECT +00 0004 OPNIN +00 0008 OPNOT +00 000C OPNINO +00 0010 MXDMOD +00 0020 INSCLR +00 0045 SCREDT +00 004B KBD +00 0053 DISPLY +00 0050 PRINTR +00 0043 CASSET +00 0052 RS232 +00 0044 DISK +00 0001 SUCCES +00 0080 BRKABT +00 0081 PRVOPN +00 0082 NONDEV +00 0083 WRONLY +00 0084 NVALID +00 0085 NOTOPN +00 0086 BADIOC +00 0087 RDONLY +00 0088 EOFERR +00 0089 TRNRCD +00 008A TIMOUT +00 008B DNACK +00 008C FRMERR +00 008D CRSROR +00 008E OVRRUN +00 008F CHKERR +00 0090 DERRER +00 0091 BADMOD +00 0092 FNCNOT +00 0093 SCRMEM +00 00AA FILENF +00 0000 LNFLG +00 0001 NGFLAG +00 0002 CASINI +00 0004 RAMLO +00 0006 TRAMSZ +00 0007 TSTDAT +00 0008 WARMST +00 0009 BOOTQ +00 000A DOSVEC +00 000C DOSINI +00 000E APPMHI +00 0010 POKMSK +00 0011 BRKKEY +00 0012 RTCLOK +00 0015 BUFADR +00 0017 ICCOMT +00 0018 DSKFMS +00 001A DSKUTL +00 001C ABUFPT +00 0020 ICHIDZ +00 0021 ICDNOZ +00 0022 ICCOMZ +00 0023 ICSTAZ +00 0024 ICBALZ +00 0025 ICBAHZ +00 0026 ICPTLZ +00 0027 ICPTHZ +00 0028 ICBLLZ +00 0029 ICBLHZ +00 002A ICAX1Z +00 002B ICAX2Z +00 002C ICSPRZ +00 002E ICIDNO +00 002F CIOCHR +00 0030 STATUS +00 0031 CHKSUM +00 0032 BUFRLO +00 0033 BUFRHI +00 0034 BFENLO +00 0035 BFENHI +00 0036 LTEMP +00 0038 BUFRFL +00 0039 RECVDN +00 003A XMTDON +00 003B CHKSNT +00 003C NOCKSM +00 003E FTYPE +00 003F FEOF +00 0040 FREQ +00 0041 SOUNDR +00 0042 CRITIC +00 0043 FMSZPG +00 004A ZCHAIN +00 004C DSTAT +00 004D ATRACT +00 004E DRKMSK +00 004F COLRSH +00 0050 TMPCHR +00 0051 HOLD1 +00 0052 LMARGN +00 0053 RMARGN +00 0054 ROWCRS +00 0055 COLCRS +00 0057 DINDEX +00 0058 SAVMSC +00 005A OLDROW +00 005B OLDCOL +00 005D OLDCHR +00 005E OLDADR +00 0060 FKDEF +00 0062 PALNTS +00 0063 LOGCOL +00 0064 ADRESS +00 0066 MLTEMP +00 0068 SAVADR +00 006A RAMTOP +00 006B BUFCNT +00 006C BUFSTR +00 006E BITMSK +00 006F SHFAMT +00 0070 ROWAC +00 0072 COLAC +00 0074 ENDPT +00 0076 DELTAR +00 0077 DELTAC +00 0079 KEYDEF +00 007B SWPFLG +00 007C HOLDCH +00 007D INSDAT +00 007E COUNTR +00 0200 VDSLST +00 0202 VPRCED +00 0204 VINTER +00 0206 VBREAK +00 0208 VKEYBD +00 020A VSERIN +00 020C VSEROR +00 020E VSEROC +00 0210 VTIMR1 +00 0212 VTIMR2 +00 0214 VTIMR4 +00 0216 VIMIRQ +00 0218 CDTMV1 +00 021A CDTMV2 +00 021C CDTMV3 +00 021E CDTMV4 +00 0220 CDTMV5 +00 0222 VVBLKI +00 0224 VVBLKD +00 0226 CDTMA1 +00 0228 CDTMA2 +00 022A CDTMF3 +00 022B SRTIMR +00 022C CDTMF4 +00 022D INTEMP +00 022E CDTMF5 +00 022F DMACTLS +00 0230 DLPTRS +00 0232 SSKCTL +00 0233 LCOUNT +00 0234 LPENH +00 0235 LPENV +00 0236 BRKKY +00 0238 RELADR +00 023A CDEVIC +00 023B CCOMND +00 023C CAUX1 +00 023D CAUX2 +00 023F ERRFLG +00 0240 DFLAGS +00 0241 DBSECT +00 0242 BOOTAD +00 0244 COLDST +00 0245 RECLEN +00 0246 DSKTIM +00 026C VSFLAG +00 026D KEYDIS +00 026E FINE +00 026F GPRIOR +00 0270 PADDL0 +00 0271 PADDL1 +00 0272 PADDL2 +00 0273 PADDL3 +00 0278 STICK0 +00 0279 STICK1 +00 027C PTRIG0 +00 027D PTRIG1 +00 027E PTRIG2 +00 027F PTRIG3 +00 0284 STRIG0 +00 0285 STRIG1 +00 0288 HIBYTE +00 0289 WMODE +00 028A BLIM +00 028B IMASK +00 028C JVECK +00 028E NEWADR +00 0290 TXTROW +00 0291 TXTCOL +00 0293 TINDEX +00 0294 TXTMSC +00 0296 TXTOLD +00 029C CRETRY +00 029D HOLD3 +00 029E SUBTMP +00 029F HOLD2 +00 02A0 DMASK +00 02A1 TMPLBT +00 02A2 ESCFLG +00 02A3 TABMAP +00 02B2 LOGMAP +00 02B6 INVFLG +00 02B7 FILFLG +00 02B8 TMPROW +00 02B9 TMPCOL +00 02BB SCRFLG +00 02BC HOLD4 +00 02BD DRETRY +00 02BE SHFLOK +00 02BF BOTSCR +00 02C0 PCOLR0 +00 02C1 PCOLR1 +00 02C2 PCOLR2 +00 02C3 PCOLR3 +00 02C4 COLOR0 +00 02C5 COLOR1 +00 02C6 COLOR2 +00 02C7 COLOR3 +00 02C8 COLOR4 +00 02C8 COLBAKS +00 02C9 RUNADR +00 02CB HIUSED +00 02CD ZHIUSE +00 02CF GBYTEA +00 02D1 LOADAD +00 02D3 ZLOADA +00 02D5 DSCTLN +00 02D7 ACMISR +00 02D9 KRPDEL +00 02DA KEYREP +00 02DB NOCLIK +00 02DC HELPFG +00 02DD DMASAV +00 02DE PBPNT +00 02DF PBUFSZ +00 02E0 DOSRUN +00 02E4 RAMSIZ +00 02E5 MEMTOP +00 02E7 MEMLO +00 02E9 HNDLOD +00 02EA DVSTAT +00 02EE CBAUDL +00 02EF CBAUDH +00 02F0 CRSINH +00 02F1 KEYDEL +00 02F2 CH1 +00 02F3 CHACT +00 02F4 CHBAS +00 02F5 NEWROW +00 02F6 NEWCOL +00 02F8 ROWINC +00 02F9 COLINC +00 02FA CHAR +00 02FB ATACHR +00 02FC CHKEY +00 02FD FILDAT +00 02FE DSPFLG +00 02FF SSFLAG +00 0300 DDEVIC +00 0301 DUNIT +00 0302 DCOMND +00 0303 DSTATS +00 0304 DBUFLO +00 0305 DBUFHI +00 0306 DTIMLO +00 0307 DUNUSE +00 0308 DBYTLO +00 0309 DBYTHI +00 030A DAUX1 +00 030B DAUX2 +00 030C TIMER1 +00 030E JMPERS +00 030F CASFLG +00 0310 TIMER2 +00 0314 PTIMOT +00 0316 SAVIO +00 0317 TIMFLG +00 0318 STACKP +00 0319 TSTAT +00 031A HATABS +00 033D PUPBT1 +00 033E PUPBT2 +00 033F PUPBT3 +00 0340 ICHID +00 0341 ICDNO +00 0342 ICCOM +00 0343 ICSTA +00 0344 ICBAL +00 0345 ICBAH +00 0346 ICPTL +00 0347 ICPTH +00 0348 ICBLL +00 0349 ICBLH +00 034A ICAX1 +00 034B ICAX2 +00 034C ICSPR +00 03C0 PRNBUF +00 03E8 SUPERF +00 03E9 CKEY +00 03EA CASSBT +00 03EB CARTCK +00 03ED ACMVAR +00 03F9 MINTLK +00 03FA GINTLK +00 03FB CHLINK +00 03FD CASBUF +00 0480 USAREA +00 D200 POKEY +00 D200 POT0 +00 D201 POT1 +00 D202 POT2 +00 D203 POT3 +00 D204 POT4 +00 D205 POT5 +00 D206 POT6 +00 D207 POT7 +00 D208 ALLPOT +00 D209 KBCODE +00 D20A RANDOM +00 D20B POTGO +00 D20D SERIN +00 D20E IRQST +00 D20F SKSTAT +00 D200 AUDF1 +00 D201 AUDC1 +00 D202 AUDF2 +00 D203 AUDC2 +00 D204 AUDF3 +00 D205 AUDC3 +00 D206 AUDF4 +00 D207 AUDC4 +00 D208 AUDCTL +00 D209 STIMER +00 D20A SKRES +00 D20D SEROUT +00 D20E IRQEN +00 D20F SKCTL +00 D000 GTIA +00 D000 HPOSP0 +00 D001 HPOSP1 +00 D002 HPOSP2 +00 D003 HPOSP3 +00 D004 HPOSM0 +00 D005 HPOSM1 +00 D006 HPOSM2 +00 D007 HPOSM3 +00 D008 SIZEP0 +00 D009 SIZEP1 +00 D00A SIZEP2 +00 D00B SIZEP3 +00 D00C SIZEM +00 D00D GRAFP0 +00 D00E GRAFP1 +00 D00F GRAFP2 +00 D010 GRAFP3 +00 D011 GRAFM +00 D012 COLPM0 +00 D013 COLPM1 +00 D014 COLPM2 +00 D015 COLPM3 +00 D016 COLPF0 +00 D017 COLPF1 +00 D018 COLPF2 +00 D019 COLPF3 +00 D01A COLBAK +00 D01B PRIOR +00 D01C VDELAY +00 D01D GRACTL +00 D01E HITCLR +00 D01F CONSOL +00 D000 M0PF +00 D001 M1PF +00 D002 M2PF +00 D003 M3PF +00 D004 P0PF +00 D005 P1PF +00 D006 P2PF +00 D007 P3PF +00 D008 M0PL +00 D009 M1PL +00 D00A M2PL +00 D00B M3PL +00 D00C P0PL +00 D00D P1PL +00 D00E P2PL +00 D00F P3PL +00 D010 TRIG0 +00 D011 TRIG1 +00 D012 TRIG2 +00 D013 TRIG3 +00 D014 PAL +00 D400 ANTIC +00 D400 DMACTL +00 D401 CHACTL +00 D402 DLPTR +00 D404 HSCROL +00 D405 VSCROL +00 D407 PMBASE +00 D409 CHBASE +00 D40A WSYNC +00 D40B VCOUNT +00 D40C PENH +00 D40D PENV +00 D40E NMIEN +00 D40F NMIRES +00 D40F NMIST +00 D300 PIA +00 D300 PORTA +00 D301 PORTB +00 D302 PACTL +00 D303 PBCTL +00 0001 JUMP +00 0041 JVB +00 0010 SCH +00 0020 SCV +00 0040 LMS +00 0080 DLII +00 0000 SKIP1 +00 0010 SKIP2 +00 0020 SKIP3 +00 0030 SKIP4 +00 0040 SKIP5 +00 0050 SKIP6 +00 0060 SKIP7 +00 0070 SKIP8 +00 0002 MODE2 +00 0004 MODE4 +00 0008 MODE8 +00 000E MODEE +00 000F MODEF +FFFD 0000 @DMACTL +00 0000 @DMACTL.BLANK +00 0001 @DMACTL.NARROW +00 0002 @DMACTL.STANDARD +00 0003 @DMACTL.WIDE +00 0004 @DMACTL.MISSILES +00 0008 @DMACTL.PLAYERS +00 0010 @DMACTL.LINEX1 +00 0000 @DMACTL.LINEX2 +00 0020 @DMACTL.DMA +00 003F SCR48 +00 003E SCR40 +00 003D SCR32 +FFFD 0000 @PMCNTL +00 0001 @PMCNTL.MISSILES +00 0002 @PMCNTL.PLAYERS +00 0004 @PMCNTL.TRIGS +FFFD 0000 @GTICTL +00 0000 @GTICTL.PRIOR0 +00 0001 @GTICTL.PRIOR1 +00 0002 @GTICTL.PRIOR2 +00 0004 @GTICTL.PRIOR4 +00 0008 @GTICTL.PRIOR8 +00 0010 @GTICTL.PLY5 +00 0020 @GTICTL.MLC +00 0040 @GTICTL.MODE9 +00 0080 @GTICTL.MODE10 +00 00C0 @GTICTL.MODE11 +FFFD 0000 @KBCODE +00 00FF @KBCODE._NONE +00 001C @KBCODE._ESC +00 001F @KBCODE._1 +00 001E @KBCODE._2 +00 001A @KBCODE._3 +00 0018 @KBCODE._4 +00 001D @KBCODE._5 +00 001B @KBCODE._6 +00 0033 @KBCODE._7 +00 0035 @KBCODE._8 +00 0030 @KBCODE._9 +00 0032 @KBCODE._0 +00 0036 @KBCODE._LT +00 0037 @KBCODE._GT +00 0034 @KBCODE._DEL +00 002C @KBCODE._TAB +00 002F @KBCODE._Q +00 002E @KBCODE._W +00 002A @KBCODE._E +00 0028 @KBCODE._R +00 002D @KBCODE._T +00 002B @KBCODE._Y +00 000B @KBCODE._U +00 000D @KBCODE._I +00 0008 @KBCODE._O +00 000A @KBCODE._P +00 000E @KBCODE._MIN +00 000E @KBCODE._UP +00 000F @KBCODE._EQ +00 000F @KBCODE._DOWN +00 000C @KBCODE._RET +00 003F @KBCODE._A +00 003E @KBCODE._S +00 003A @KBCODE._D +00 0038 @KBCODE._F +00 003D @KBCODE._G +00 0039 @KBCODE._H +00 0001 @KBCODE._J +00 0005 @KBCODE._K +00 0000 @KBCODE._L +00 0002 @KBCODE._SEMICOLON +00 0006 @KBCODE._PLUS +00 0006 @KBCODE._LEFT +00 0007 @KBCODE._ASTERISK +00 0007 @KBCODE._RIGHT +00 003C @KBCODE._CAPS +00 0017 @KBCODE._Z +00 0016 @KBCODE._X +00 0012 @KBCODE._C +00 0010 @KBCODE._V +00 0015 @KBCODE._B +00 0024 @KBCODE._N +00 0025 @KBCODE._M +00 0020 @KBCODE._COMMA +00 0022 @KBCODE._DOT +00 0026 @KBCODE._SLASH +00 0027 @KBCODE._ATARI +00 0011 @KBCODE._HELP +00 0003 @KBCODE._F1 +00 0004 @KBCODE._F2 +00 0013 @KBCODE._F3 +00 0014 @KBCODE._F4 +00 0021 @KBCODE._SPACE +00 009B EOL +00 0080 TEMP_W +00 2000 FONT1 +00 2400 FONT2 +00 2800 FONT3 +00 2C00 FONT4 +00 3000 SCREEN +00 3800 GAMEDL +00 3806 LINE1_ADDR +00 3809 LINE2_ADDR +00 380C LINE3_ADDR +00 380F LINE4_ADDR +00 3812 LINE5_ADDR +00 3815 LINE6_ADDR +00 3818 LINE7_ADDR +00 381B LINE8_ADDR +00 3820 FIRSTSTART +00 3855 GENERATECHARSETS +00 3857 GENERATECHARSETS.COPYLOOP +00 388B SHOWDINO +00 3897 SHOWDINO.DINOLOOP +00 389E SHOWDINO.0@ +00 38B0 SHOWDINO.1@ +00 38C2 SHOWDINO.2@ +00 38D4 SHOWDINO.3@ +00 38E6 SETGAMESCREEN +00 38FB DINO_RUN_0 +00 390F DINO_RUN_1 +00 3923 DINO_RUN_2 +00 3937 DINO_CROUCH_1 +00 394B DINO_CROUCH_2 +00 395F SHAPESTABLEL +00 3964 SHAPESTABLEH diff --git a/dino.lst b/dino.lst new file mode 100644 index 0000000..f7e4696 --- /dev/null +++ b/dino.lst @@ -0,0 +1,1144 @@ +mads 2.1.7 build 3 (13 Sep 23) +Source: dino.asm + 1 + 2 ; No internet + 3 ;--------------------------------------------------- + 4 OPT r+ + 5 + 6 ;--------------------------------------------------- + 7 ; Zpage variables + 8 .zpvar temp_w .word = $80 + 9 ;--------------------------------------------------- + 10 icl 'lib/ATARISYS.ASM' +Source: ATARISYS.ASM + 1 ;**************************************************************************** + 2 ;* ATARI PERSONAL COMPUTER * + 3 ;* SYSTEM EQUATES * + 4 ;**************************************************************************** + 5 ; + 6 ; OPERATING SYSTEM EQUATE FILE + 7 ; + 8 ; MODULE ORIGIN TABLE + 9 ; + 10 ; VECTOR TABLE + 11 ; + 12 ; HANDLER ENTRY POINTS ARE CALL- + 13 ; ED OUT IN THE FOLLOWING VECTOR + 14 ; TABLE. THESE ARE THE ADDRESSES + 15 ; MINUS ONE. + 16 ; + 17 ; EXAMPLE FOR EDITOR + 18 ; + 19 ; E400 OPEN + 20 ; 2 CLOSE + 21 ; 4 GET + 22 ; 6 PUT + 23 ; 8 STATUS + 24 ; A SPECIAL + 25 ; C JUMP TO POWER ON INIT + 26 ; F NOT USED + 27 ; + 28 = E400 EDITRV EQU $E400 ;EDITOR + 29 = E410 SCRENV EQU $E410 ;TV SCREEN + 30 = E420 KEYBDV EQU $E420 ;KEYBOARD + 31 = E430 PRINTV EQU $E430 ;PRINTER + 32 = E440 CASETV EQU $E440 ;CASSETTE + 33 ; + 34 ; JUMP VECTOR TABLE + 35 ; + 36 ; THE FOLLOWING IS A TABLE OF + 37 ; JUMP INSTRUCTIONS TO VARIOUS + 38 ; ENTRY POINTS IN THE OPERATING + 39 ; SYSTEM + 40 ; + 41 = E450 DISKIV EQU $E450 ;DISK INITIALIZATION + 42 = E453 DSKINV EQU $E453 ;DISK INTERFACE + 43 = E456 CIOV EQU $E456 ;CENTRAL I/O ROUTINE + 44 = E459 SIOV EQU $E459 ;SERIAL I/O ROUTINE + 45 = E45C SETVBV EQU $E45C ;SET SYSTEM TIMERS + 46 = E45F SYSVBV EQU $E45F ;VBLANK CALCULATIONS + 47 = E462 XITVBV EQU $E462 ;EXIT VBLANK + 48 = E465 SIOINV EQU $E465 ;SIO INITIALIZATION + 49 = E468 SENDEV EQU $E468 ;SEND ENABLE ROUTINE + 50 = E46B INTINV EQU $E46B ;INTRPT HANDLER INIT + 51 = E46E CIOINV EQU $E46E ;CIO INITIALIZATION + 52 = E471 BLKBDV EQU $E471 ;BLACKBOARD MODE + 53 = E474 WARMSV EQU $E474 ;WARM START VECTOR + 54 = E477 COLDSV EQU $E477 ;COLD START VECTOR + 55 = E47A RBLOKV EQU $E47A ;CASSETTE READ BLOCK + 56 = E47D CSOPIV EQU $E47D ;CASSETTE INPUT OPEN + 57 ; + 58 ; VECTORS ADDED FOR 800XL + 59 ; + 60 = E480 PUPDIV EQU $E480 ;POWER UP DISPLAY + 61 = E483 SLFTSV EQU $E483 ;SELF TEST PROGRAM + 62 = E486 PHENTV EQU $E486 ;UPLOADED HANDLER ENTER + 63 = E489 PHULNV EQU $E489 ;UPLOADED HANDLER UNLINK + 64 = E48C PHINIV EQU $E48C ;UPLOADED HANDLER INIT + 65 ; + 66 ; OPERATING SYSTEM EQUATES + 67 ; + 68 ; COMMAND CODES FOR IOCBS + 69 ; + 70 = 0003 _OPEN EQU $03 ;OPEN FOR I/O + 71 = 0005 GETREC EQU $05 ;GET RECORD (TEXT) + 72 = 0007 GETCHR EQU $07 ;GET CHARACTER(S) + 73 = 0009 PUTREC EQU $09 ;PUT RECORD (TEXT) + 74 = 000B PUTCHR EQU $0B ;PUT CHARACTER(S) + 75 = 000C _CLOSE EQU $0C ;CLOSE DEVICE + 76 = 000D STATIS EQU $0D ;STATUS REQUEST + 77 = 000E SPECIL EQU $0E ;SPECIAL ENTRY COMMAND + 78 ; + 79 ; SPECIAL ENTRY COMMANDS + 80 ; + 81 = 0011 DRAWLN EQU $11 ;DRAW LINE + 82 = 0012 FILLIN EQU $12 ;FILL + 83 = 0020 RENAME EQU $20 ;RENAME DISK FILE + 84 = 0021 DELETE EQU $21 ;DELETE DISK FILE + 85 = 0022 FORMAT EQU $22 ;FORMAT DISK + 86 = 0023 LOCKFL EQU $23 ;LOCK FILE + 87 = 0024 UNLOCK EQU $24 ;UNLOCK FILE + 88 = 0025 POINT EQU $25 ;POINT SECTOR + 89 = 0026 NOTE EQU $26 ;NOTE SECTOR + 90 = 00FF IOCFRE EQU $FF ;IOCB "FREE" + 91 ; + 92 ; AUX1 EQUATES + 93 ; () INDICATES WHICH DEVICES + 94 ; + 95 = 0001 APPEND EQU $01 ;WR APPEND(D)-SCN RD(E) + 96 = 0002 DIRECT EQU $02 ;OPEN DIRECTORY(D) + 97 = 0004 OPNIN EQU $04 ;OPEN FOR INPUT(ALL) + 98 = 0008 OPNOT EQU $08 ;OPEN FOR OUTPUT(ALL) + 99 = 000C OPNINO EQU $0C ;OPEN INPUT&OUTPUT(ALL) + 100 = 0010 MXDMOD EQU $10 ;OPEN MIXED MODE(E,S) + 101 = 0020 INSCLR EQU $20 ;OPEN W/O CLEAR(E,S) + 102 ; + 103 ; DEVICE NAMES + 104 ; + 105 = 0045 SCREDT EQU 'E' ;SCREEN EDITOR (R/W) + 106 = 004B KBD EQU 'K' ;KEYBOARD (R ONLY) + 107 = 0053 DISPLY EQU 'S' ;SCREEN DISPLAY (R/W) + 108 = 0050 PRINTR EQU 'P' ;PRINTER (W ONLY) + 109 = 0043 CASSET EQU 'C' ;CASSETTE (R/W) + 110 = 0052 RS232 EQU 'R' ;MODEM (R/W) + 111 = 0044 DISK EQU 'D' ;DISK (R/W) + 112 ; + 113 ; + 114 ; + 115 ; OPERATING SYSTEM STATUS CODES + 116 ; + 117 = 0001 SUCCES EQU $01 ;SUCCESSFUL OPERATION + 118 = 0080 BRKABT EQU $80 ;BREAK KEY ABORT + 119 = 0081 PRVOPN EQU $81 ;IOCB ALREADY OPEN + 120 = 0082 NONDEV EQU $82 ;NON-EXISTANT DEVICE + 121 = 0083 WRONLY EQU $83 ;IOCB OPEN FOR W ONLY + 122 = 0084 NVALID EQU $84 ;INVALID COMMAND + 123 = 0085 NOTOPN EQU $85 ;DEVICE/FILE NOT OPEN + 124 = 0086 BADIOC EQU $86 ;INVALID IOCB # + 125 = 0087 RDONLY EQU $87 ;IOCB OPEN FOR R ONLY + 126 = 0088 EOFERR EQU $88 ;END OF FILE + 127 = 0089 TRNRCD EQU $89 ;TRUNCATED RECORD + 128 = 008A TIMOUT EQU $8A ;PERIPHERAL TIMEOUT + 129 = 008B DNACK EQU $8B ;DEVICE NO ACKNOWLEDGE + 130 = 008C FRMERR EQU $8C ;SERIAL BUS FRAME ERR + 131 = 008D CRSROR EQU $8D ;CURSOR OVERRANGE + 132 = 008E OVRRUN EQU $8E ;SERIAL DATA OVERRUN + 133 = 008F CHKERR EQU $8F ;SERIAL CHECKSUM ERR + 134 = 0090 DERRER EQU $90 ;PERIPHRAL DEVICE ERR + 135 = 0091 BADMOD EQU $91 ;BAD SCREEN MODE # + 136 = 0092 FNCNOT EQU $92 ;NONEXISTANT FUNCTION + 137 = 0093 SCRMEM EQU $93 ;SCREEN MEM TOO SMALL + 138 = 00AA FILENF EQU $AA ;FILE NOT FOUND + 139 ; + 140 ; PAGE ZERO RAM ASSIGNMENTS + 141 ; + 142 = 0000 LNFLG EQU $00 ;LINBUG RAM + 143 = 0001 NGFLAG EQU $01 ;POWER-UP SELF-TEST FLAG + 144 ; + 145 ; THESE LOCATIONS NOT CLEARED + 146 ; + 147 = 0002 CASINI EQU $02 ;CASSETTE INIT LOC + 148 = 0004 RAMLO EQU $04 ;RAM POINTER MEM TST + 149 = 0006 TRAMSZ EQU $06 ;TEMP REG RAM SIZE + 150 = 0007 TSTDAT EQU $07 ;RAM TEST DATA REG + 151 ; + 152 ;CLEARED ON COLDSTART ONLY + 153 ; + 154 = 0008 WARMST EQU $08 ;WARM START FLAG + 155 = 0009 BOOTQ EQU $09 ;SUCCESSFUL BOOT FLG + 156 = 000A DOSVEC EQU $0A ;DOS START VECTOR + 157 = 000C DOSINI EQU $0C ;DOS INIT ADDRESS + 158 = 000E APPMHI EQU $0E ;APPL MEM HI LIMIT + 159 ; + 160 ;CLEARED ON COLD OR WARM START + 161 ; + 162 = 0010 POKMSK EQU $10 ;MASK POKEY IRQ + 163 = 0011 BRKKEY EQU $11 ;BREAK KEY FLAG + 164 = 0012 RTCLOK EQU $12 ;REAL TIME CLOCK + 165 = 0015 BUFADR EQU $15 ;INDIRECT BUFF ADDR + 166 = 0017 ICCOMT EQU $17 ;COMMAND FOR VECTOR + 167 = 0018 DSKFMS EQU $18 ;FMS POINTER + 168 = 001A DSKUTL EQU $1A ;DISK UTILITIES PTR + 169 = 001C ABUFPT EQU $1C ;RESERVED + 170 = 0020 ICHIDZ EQU $20 ;HANDLER INDEX # + 171 = 0021 ICDNOZ EQU $21 ;DEVICE NUMBER + 172 = 0022 ICCOMZ EQU $22 ;COMMAND CODE + 173 = 0023 ICSTAZ EQU $23 ;STATUS RETURN + 174 = 0024 ICBALZ EQU $24 ;BUFFER ADDRESS + 175 = 0025 ICBAHZ EQU $25 + 176 = 0026 ICPTLZ EQU $26 ;PUT BYTE ROUTINE-1 + 177 = 0027 ICPTHZ EQU $27 + 178 = 0028 ICBLLZ EQU $28 ;BUFFER LENGTH + 179 = 0029 ICBLHZ EQU $29 + 180 = 002A ICAX1Z EQU $2A ;AUXILIARY BYTES + 181 = 002B ICAX2Z EQU $2B + 182 = 002C ICSPRZ EQU $2C ;SPARE BYTES + 183 = 002E ICIDNO EQU $2E ;IOCB # X 16 + 184 = 002F CIOCHR EQU $2F ;CIO CHARACTER BYTE + 185 = 0030 STATUS EQU $30 ;INTERNAL STATUS + 186 = 0031 CHKSUM EQU $31 ;CHECKSUM + 187 = 0032 BUFRLO EQU $32 ;DATA BUFFER LO BYTE + 188 = 0033 BUFRHI EQU $33 ;DATA BUFFER HI BYTE + 189 = 0034 BFENLO EQU $34 ;NEXT BYTE PAST DATA + 190 = 0035 BFENHI EQU $35 ;BUFFER (HI & LO) + 191 = 0036 LTEMP EQU $36 ;LOADER TEMP + 192 = 0038 BUFRFL EQU $38 ;DATA BUFFR FULL FLG + 193 = 0039 RECVDN EQU $39 ;RECIEVE DONE FLAG + 194 = 003A XMTDON EQU $3A ;XMIT DONE FLAG + 195 = 003B CHKSNT EQU $3B ;CHECKSUM SENT FLAG + 196 = 003C NOCKSM EQU $3C ;NO CHKSUM SENT FLAG + 197 ;BPTR EQU $3D ;CASSETTE DATA INDEX + 198 = 003E FTYPE EQU $3E ;INTERRECORD GAP TYPE + 199 = 003F FEOF EQU $3F ;END OF FILE FLAG + 200 = 0040 FREQ EQU $40 ;BEEP COUNT + 201 = 0041 SOUNDR EQU $41 ;NOISY I/O FLAG + 202 = 0042 CRITIC EQU $42 ;CRITICAL MODE + 203 = 0043 FMSZPG EQU $43 ;FMS ZERO PAGE + 204 = 004A ZCHAIN EQU $4A ;HANDLER LOADER TEMP + 205 = 004C DSTAT EQU $4C ;DISPLAY STATUS + 206 = 004D ATRACT EQU $4D ;ATTRACT FLAG + 207 = 004E DRKMSK EQU $4E ;DARK ATTRACT MASK + 208 = 004F COLRSH EQU $4F ;COLOR SHIFTER + 209 = 0050 TMPCHR EQU $50 ;TEMP STORAGE + 210 = 0051 HOLD1 EQU $51 ;TEMP STORAGE + 211 = 0052 LMARGN EQU $52 ;LEFT MARGIN (1) + 212 = 0053 RMARGN EQU $53 ;RIGHT MARGIN (38) + 213 = 0054 ROWCRS EQU $54 ;CURSOR COUNTERS + 214 = 0055 COLCRS EQU $55 + 215 = 0057 DINDEX EQU $57 ;DISPLAY MODE # + 216 = 0058 SAVMSC EQU $58 ;SCREEN MEM ADDR + 217 = 005A OLDROW EQU $5A ;DRAW START POSIT + 218 = 005B OLDCOL EQU $5B + 219 = 005D OLDCHR EQU $5D ;DATA UNDER CURSOR + 220 = 005E OLDADR EQU $5E ;CURSOR MEM ADDR + 221 = 0060 FKDEF EQU $60 ;FUNC KEY DEFEAT POINTER + 222 = 0062 PALNTS EQU $62 ;PAL/NTSC FLAG + 223 = 0063 LOGCOL EQU $63 ;COL IN LOGICAL LINE + 224 = 0064 ADRESS EQU $64 ;TEMP STORAGE + 225 = 0066 MLTEMP EQU $66 ;TEMP STORAGE + 226 = 0068 SAVADR EQU $68 ;TEMP STORAGE + 227 = 006A RAMTOP EQU $6A ;AVAILABLE RAM PAGES + 228 = 006B BUFCNT EQU $6B ;BUFFER COUNT + 229 = 006C BUFSTR EQU $6C ;EDITOR GETCH POINTR + 230 = 006E BITMSK EQU $6E ;BIT MASK + 231 = 006F SHFAMT EQU $6F ;PIXEL JUSTIFICATION + 232 = 0070 ROWAC EQU $70 ;ROW ACCUMULATOR + 233 = 0072 COLAC EQU $72 ;COLUMN ACCUMULATOR + 234 = 0074 ENDPT EQU $74 ;LINE LENGTH + 235 = 0076 DELTAR EQU $76 ;DELTA ROW + 236 = 0077 DELTAC EQU $77 ;DELTA COLUMN + 237 = 0079 KEYDEF EQU $79 ;KEY DEFEAT POINTER + 238 = 007B SWPFLG EQU $7B ;SPLIT SCN CURS CNTL + 239 = 007C HOLDCH EQU $7C ;KB CHAR TEMP HOLD + 240 = 007D INSDAT EQU $7D ;TEMP STORAGE + 241 = 007E COUNTR EQU $7E ;DRAW ITERATION CNT + 242 ; + 243 ; 80-FF ARE RESERVED FOR USER + 244 ; + 245 ; NOTE: SEE FLOATING POINT + 246 ; SUBROUTINE AREA FOR ZERO + 247 ; PAGE CELLS + 248 ; + 249 ; PAGE 1 - HARDWARE STACK + 250 ; + 251 ; PAGE TWO RAM ASSIGNMENTS + 252 ; + 253 = 0200 VDSLST EQU $0200 ;DSP LIST NMI VECTOR + 254 = 0202 VPRCED EQU $0202 ;PROCEED IRQ VECTOR + 255 = 0204 VINTER EQU $0204 ;INTERUPT IRQ VECTOR + 256 = 0206 VBREAK EQU $0206 ;BRK INST IRQ VECTOR + 257 = 0208 VKEYBD EQU $0208 ;POKEY KB IRQ VECTOR + 258 = 020A VSERIN EQU $020A ;POKEY INPUT RDY IRQ + 259 = 020C VSEROR EQU $020C ;POKEY OUTPUT RDY + 260 = 020E VSEROC EQU $020E ;POKEY OUTPUT DONE + 261 = 0210 VTIMR1 EQU $0210 ;POKEY TIMER 1 IRQ + 262 = 0212 VTIMR2 EQU $0212 ;POKEY TIMER 2 IRQ + 263 = 0214 VTIMR4 EQU $0214 ;POKEY TIMER 4 IRQ + 264 = 0216 VIMIRQ EQU $0216 ;IMMED IRQ VECTOR + 265 = 0218 CDTMV1 EQU $0218 ;COUNT DOWN TIMER 1 + 266 = 021A CDTMV2 EQU $021A ;COUNT DOWN TIMER 2 + 267 = 021C CDTMV3 EQU $021C ;COUNT DOWN TIMER 3 + 268 = 021E CDTMV4 EQU $021E ;COUNT DOWN TIMER 4 + 269 = 0220 CDTMV5 EQU $0220 ;COUNT DOWN TIMER 5 + 270 = 0222 VVBLKI EQU $0222 ;IMM VBLK NMI VECTOR + 271 = 0224 VVBLKD EQU $0224 ;DEF VBLK NMI VECTOR + 272 = 0226 CDTMA1 EQU $0226 ;CDTMV1 JSR ADDRESS + 273 = 0228 CDTMA2 EQU $0228 ;CDTMV2 JSR ADDRESS + 274 = 022A CDTMF3 EQU $022A ;CDTMV3 FLAG + 275 = 022B SRTIMR EQU $022B ;SOFTWARE REPEAT TMR + 276 = 022C CDTMF4 EQU $022C ;CDTMV4 FLAG + 277 = 022D INTEMP EQU $022D ;IAN'S TEMP + 278 = 022E CDTMF5 EQU $022E ;CDTMV5 FLAG + 279 = 022F DMACTLS EQU $022F ;SAVE DMACTL REG + 280 = 0230 DLPTRS EQU $0230 ;SAVE DISP LIST LO + 281 ;SDLSTH EQU $0231 ;SAVE DISP LIST HI + 282 = 0232 SSKCTL EQU $0232 ;SKCTL REGISTER RAM + 283 = 0233 LCOUNT EQU $0233 ;LOADER TEMP + 284 = 0234 LPENH EQU $0234 ;LIGHT PEN HORIZONTAL + 285 = 0235 LPENV EQU $0235 ;LIGHT PEN VERTICAL + 286 = 0236 BRKKY EQU $0236 ;BREAK KEY VECTOR + 287 = 0238 RELADR EQU $0238 ;LOADER REL ADDR + 288 = 023A CDEVIC EQU $023A ;COMMAND BUFFER-DEV + 289 = 023B CCOMND EQU $023B ;COMMAND BUFFER-CMND + 290 = 023C CAUX1 EQU $023C ;COMMAND BUFFER AUX1 + 291 = 023D CAUX2 EQU $023D ;COMMAND BUFFER AUX2 + 292 ;TEMP EQU $023E ;TEMPORARY RAM CELL + 293 = 023F ERRFLG EQU $023F ;DEVICE ERROR FLAG + 294 = 0240 DFLAGS EQU $0240 ;DISK FLAGS(SECTOR1) + 295 = 0241 DBSECT EQU $0241 ;# DISK BOOT SECTORS + 296 = 0242 BOOTAD EQU $0242 ;DISK BOOT ADDRESS + 297 = 0244 COLDST EQU $0244 ;COLDSTART FLAG 1=CS + 298 = 0245 RECLEN EQU $0245 ;LOADER LENGTH + 299 = 0246 DSKTIM EQU $0246 ;DISK TIME OUT REG + 300 = 026C VSFLAG EQU $026C ;FINE SCROLL TEMP + 301 = 026D KEYDIS EQU $026D ;KEY DISABLE FLAG + 302 = 026E FINE EQU $026E ;FINE SCROLL ENABLE(A1200) + 303 = 026F GPRIOR EQU $026F ;GLOBAL PRIORITY + 304 = 0270 PADDL0 EQU $0270 ;POT 0 RAM CELL + 305 = 0271 PADDL1 EQU $0271 + 306 = 0272 PADDL2 EQU $0272 + 307 = 0273 PADDL3 EQU $0273 + 308 = 0278 STICK0 EQU $0278 ;JOYSTICK 0 RAM CELL + 309 = 0279 STICK1 EQU $0279 + 310 = 027C PTRIG0 EQU $027C ;PADDLE TRIGGER 0 + 311 = 027D PTRIG1 EQU $027D + 312 = 027E PTRIG2 EQU $027E + 313 = 027F PTRIG3 EQU $027F + 314 = 0284 STRIG0 EQU $0284 ;JOYSTICK TRIGGER 0 + 315 = 0285 STRIG1 EQU $0285 + 316 = 0288 HIBYTE EQU $0288 ;LOADER + 317 = 0289 WMODE EQU $0289 ;CASSETTE R/W MODE + 318 = 028A BLIM EQU $028A ;CASSETTE RECORD SIZE + 319 = 028B IMASK EQU $028B + 320 = 028C JVECK EQU $028C ;JUMP VECTOR + 321 = 028E NEWADR EQU $028E ;LOADER NEW ADDRESS + 322 = 0290 TXTROW EQU $0290 ;TEXT ROWCRS + 323 = 0291 TXTCOL EQU $0291 ;TEXT COLCRS + 324 = 0293 TINDEX EQU $0293 ;TEXT INDEX + 325 = 0294 TXTMSC EQU $0294 ;TEXT WINDOW MEM ADD + 326 = 0296 TXTOLD EQU $0296 ;TEXT OLDROW & COL + 327 = 029C CRETRY EQU $029C ;# COMMAND RETRIES + 328 = 029D HOLD3 EQU $029D + 329 = 029E SUBTMP EQU $029E + 330 = 029F HOLD2 EQU $029F + 331 = 02A0 DMASK EQU $02A0 ;PIXEL LOCATION MASK + 332 = 02A1 TMPLBT EQU $02A1 + 333 = 02A2 ESCFLG EQU $02A2 ;ESCAPE FLAG + 334 = 02A3 TABMAP EQU $02A3 ;TAB STOP MAP + 335 = 02B2 LOGMAP EQU $02B2 ;LINE START BIT MAP + 336 = 02B6 INVFLG EQU $02B6 ;INVERSE VIDEO FLAG + 337 = 02B7 FILFLG EQU $02B7 ;FILL FLAG FOR DRAW + 338 = 02B8 TMPROW EQU $02B8 + 339 = 02B9 TMPCOL EQU $02B9 + 340 = 02BB SCRFLG EQU $02BB ;SET IF SCROLLING + 341 = 02BC HOLD4 EQU $02BC ;TEMP USED BY DRAW + 342 = 02BD DRETRY EQU $02BD ;# OF DEVICE RETRIES + 343 = 02BE SHFLOK EQU $02BE ;SHIFT/CTL LOCK FLAG + 344 = 02BF BOTSCR EQU $02BF ;BOTTOM OF SCREEN + 345 = 02C0 PCOLR0 EQU $02C0 ;P0 COLOR + 346 = 02C1 PCOLR1 EQU $02C1 ;P1 COLOR + 347 = 02C2 PCOLR2 EQU $02C2 ;P2 COLOR + 348 = 02C3 PCOLR3 EQU $02C3 ;P3 COLOR + 349 = 02C4 COLOR0 EQU $02C4 ;COLOR 0 + 350 = 02C5 COLOR1 EQU $02C5 + 351 = 02C6 COLOR2 EQU $02C6 + 352 = 02C7 COLOR3 EQU $02C7 + 353 = 02C8 COLOR4 EQU $02C8 + 354 = 02C8 COLBAKS EQU COLOR4 + 355 = 02C9 RUNADR EQU $02C9 ;LOADER + 356 = 02CB HIUSED EQU $02CB ;LOADER + 357 = 02CD ZHIUSE EQU $02CD ;LOADER + 358 = 02CF GBYTEA EQU $02CF ;LOADER + 359 = 02D1 LOADAD EQU $02D1 ;LOADER + 360 = 02D3 ZLOADA EQU $02D3 ;LOADER + 361 = 02D5 DSCTLN EQU $02D5 ;DISK SECTOR LENGTH + 362 = 02D7 ACMISR EQU $02D7 ;RESERVED + 363 = 02D9 KRPDEL EQU $02D9 ;KEY REPEAT DELAY + 364 = 02DA KEYREP EQU $02DA ;KEY REPEAT RATE(VBLANKS) + 365 = 02DB NOCLIK EQU $02DB ;CLICK ENABLE/DISABLE + 366 = 02DC HELPFG EQU $02DC ;HELP KEY FLAG + 367 = 02DD DMASAV EQU $02DD ;DMA SAVE STATE + 368 = 02DE PBPNT EQU $02DE ;PRINT BUFFER POINTER + 369 = 02DF PBUFSZ EQU $02DF ;PRINT BUFFER SIZE + 370 = 02E0 DOSRUN EQU $02E0 ;DOS RUN/INIT ADDRESSES + 371 = 02E4 RAMSIZ EQU $02E4 ;RAM SIZE-HIGH BYTE + 372 = 02E5 MEMTOP EQU $02E5 ;TOP OF AVAIL MEMORY + 373 = 02E7 MEMLO EQU $02E7 ;BOTTOM OF AVAIL MEM + 374 = 02E9 HNDLOD EQU $02E9 ;POLL FLAG (1200) + 375 = 02EA DVSTAT EQU $02EA ;STATUS BUFFER + 376 = 02EE CBAUDL EQU $02EE ;CASSETTE BAUD RATE + 377 = 02EF CBAUDH EQU $02EF + 378 = 02F0 CRSINH EQU $02F0 ;CURSOR INHIBIT 0=ON + 379 = 02F1 KEYDEL EQU $02F1 ;KEY DELAY + 380 = 02F2 CH1 EQU $02F2 ;PRIOR KB CHAR CODE + 381 = 02F3 CHACT EQU $02F3 ;CHACTL REGISTER RAM + 382 = 02F4 CHBAS EQU $02F4 ;CHBAS REGISTER RAM + 383 = 02F5 NEWROW EQU $02F5 ;POINT DRAW GOES TO + 384 = 02F6 NEWCOL EQU $02F6 + 385 = 02F8 ROWINC EQU $02F8 ;ROW INCREMENT VALUE + 386 = 02F9 COLINC EQU $02F9 ;COL INCREMENT VALUE + 387 = 02FA CHAR EQU $02FA ;INTERNAL CHAR CODE + 388 = 02FB ATACHR EQU $02FB ;ATASCII CHARACTER + 389 = 02FC CHKEY EQU $02FC ;KB CHAR CODE (FIFO) + 390 = 02FD FILDAT EQU $02FD ;RIGHT FILL DATA + 391 = 02FE DSPFLG EQU $02FE ;DISPLAY FLAG + 392 = 02FF SSFLAG EQU $02FF ;START/STOP FLAG + 393 ; + 394 ; PAGE THREE RAM ASSIGNMENTS + 395 ; + 396 = 0300 DDEVIC EQU $0300 ;BUS I.D. NUMBER + 397 = 0301 DUNIT EQU $0301 ;UNIT NUMBER + 398 = 0302 DCOMND EQU $0302 ;BUS COMMAND + 399 = 0303 DSTATS EQU $0303 ;COMMAND TYPE/STATUS + 400 = 0304 DBUFLO EQU $0304 ;DATA BUFFER LO BYTE + 401 = 0305 DBUFHI EQU $0305 ;DATA BUFFER HI BYTE + 402 = 0306 DTIMLO EQU $0306 ;DEVICE TIMEOUT SECS + 403 = 0307 DUNUSE EQU $0307 ;UNUSED BYTE + 404 = 0308 DBYTLO EQU $0308 ;# OF BYTES XFERRED + 405 = 0309 DBYTHI EQU $0309 + 406 = 030A DAUX1 EQU $030A ;COMMAND AUX BYTE 1 + 407 = 030B DAUX2 EQU $030B ;COMMAND AUX BYTE 2 + 408 = 030C TIMER1 EQU $030C ;INITIAL TIMER VALUE + 409 = 030E JMPERS EQU $030E ;OPTIONS (1200) + 410 = 030F CASFLG EQU $030F ;CASSETE MODE IF SET + 411 = 0310 TIMER2 EQU $0310 ;FINAL TIMER VALUE + 412 ;TEMP1 EQU $0312 ;TEMP STORAGE + 413 ;TEMP2 EQU $0313 ;TEMP STORAGE + 414 = 0314 PTIMOT EQU $0314 ;PRINTER TIMEOUT REG + 415 ;TEMP3 EQU $0315 ;TEMP STORAGE + 416 = 0316 SAVIO EQU $0316 ;SAVE SERIAL IN DATA + 417 = 0317 TIMFLG EQU $0317 ;TIMEOUT FLAG C BAUD + 418 = 0318 STACKP EQU $0318 ;SIO STACK PTR SAVE + 419 = 0319 TSTAT EQU $0319 ;TEMP STATUS HOLDER + 420 = 031A HATABS EQU $031A ;HANDLER ADDR TABLE + 421 = 033D PUPBT1 EQU $033D ;POWER/UP RESET + 422 = 033E PUPBT2 EQU $033E + 423 = 033F PUPBT3 EQU $033F + 424 = 0340 ICHID EQU $0340 ;HANDLER INDEX # + 425 = 0341 ICDNO EQU $0341 ;DEVICE NUMBER + 426 = 0342 ICCOM EQU $0342 ;COMMAND CODE + 427 = 0343 ICSTA EQU $0343 ;STATUS + 428 = 0344 ICBAL EQU $0344 ;BUFFER ADDR LO BYTE + 429 = 0345 ICBAH EQU $0345 ;BUFFER ADDR HI BYTE + 430 = 0346 ICPTL EQU $0346 ;PUT ROUTINE ADDR-1 + 431 = 0347 ICPTH EQU $0347 + 432 = 0348 ICBLL EQU $0348 ;BUFFER LENGTH LO + 433 = 0349 ICBLH EQU $0349 ;BUFFER LENGTH HI + 434 = 034A ICAX1 EQU $034A ;AUX BYTE 1 + 435 = 034B ICAX2 EQU $034B ;AUX BYTE 2 + 436 = 034C ICSPR EQU $034C ;SPARE BYTES + 437 = 03C0 PRNBUF EQU $03C0 ;PRINTER BUFFER (40 BYTES) + 438 = 03E8 SUPERF EQU $03E8 ;SCREEN EDITOR + 439 = 03E9 CKEY EQU $03E9 ;START KEY FLAG + 440 = 03EA CASSBT EQU $03EA ;CASSETTE BOOT FLAG + 441 = 03EB CARTCK EQU $03EB ;CARTRIDGE CHECKSUM + 442 = 03ED ACMVAR EQU $03ED ;RESERVED + 443 = 03F9 MINTLK EQU $03F9 ;RESERVED + 444 = 03FA GINTLK EQU $03FA ;CART INTERLOCK + 445 = 03FB CHLINK EQU $03FB ;HANDLER CHAIN + 446 ; + 447 ; PAGE FOUR RAM ASSIGNMENTS + 448 ; + 449 = 03FD CASBUF EQU $03FD ;CASSETTE BUFFER (131 BYTES) + 450 = 0480 USAREA EQU $0480 ;USER AREA + 451 ; + 452 ; PAGE FIVE AND SIX ARE RESERVED + 453 ; FOR USER WORK SPACE + 454 ; + 455 ; COLLEEN MNEMONICS + 456 ; + 457 ; --------------------------------------------------------------------------- + 458 = D200 POKEY EQU $D200 + 459 ; --------------------------------------------------------------------------- + 460 ; + 461 ; READ + 462 ; + 463 = D200 POT0 EQU POKEY+$00 + 464 = D201 POT1 EQU POKEY+$01 + 465 = D202 POT2 EQU POKEY+$02 + 466 = D203 POT3 EQU POKEY+$03 + 467 = D204 POT4 EQU POKEY+$04 + 468 = D205 POT5 EQU POKEY+$05 + 469 = D206 POT6 EQU POKEY+$06 + 470 = D207 POT7 EQU POKEY+$07 + 471 = D208 ALLPOT EQU POKEY+$08 + 472 = D209 KBCODE EQU POKEY+$09 + 473 = D20A RANDOM EQU POKEY+$0a + 474 = D20B POTGO EQU POKEY+$0b + 475 = D20D SERIN EQU POKEY+$0d + 476 = D20E IRQST EQU POKEY+$0e + 477 = D20F SKSTAT EQU POKEY+$0f + 478 ; + 479 ; WRITE + 480 ; + 481 = D200 AUDF1 EQU POKEY+$00 + 482 = D201 AUDC1 EQU POKEY+$01 + 483 = D202 AUDF2 EQU POKEY+$02 + 484 = D203 AUDC2 EQU POKEY+$03 + 485 = D204 AUDF3 EQU POKEY+$04 + 486 = D205 AUDC3 EQU POKEY+$05 + 487 = D206 AUDF4 EQU POKEY+$06 + 488 = D207 AUDC4 EQU POKEY+$07 + 489 = D208 AUDCTL EQU POKEY+$08 + 490 = D209 STIMER EQU POKEY+$09 + 491 = D20A SKRES EQU POKEY+$0a + 492 = D20D SEROUT EQU POKEY+$0d + 493 = D20E IRQEN EQU POKEY+$0e + 494 = D20F SKCTL EQU POKEY+$0f + 495 ; + 496 ; + 497 ; + 498 ; --------------------------------------------------------------------------- + 499 = D000 GTIA EQU $D000 + 500 ; --------------------------------------------------------------------------- + 501 ; + 502 ; WRITE + 503 ; + 504 = D000 HPOSP0 EQU GTIA+$00 + 505 = D001 HPOSP1 EQU GTIA+$01 + 506 = D002 HPOSP2 EQU GTIA+$02 + 507 = D003 HPOSP3 EQU GTIA+$03 + 508 = D004 HPOSM0 EQU GTIA+$04 + 509 = D005 HPOSM1 EQU GTIA+$05 + 510 = D006 HPOSM2 EQU GTIA+$06 + 511 = D007 HPOSM3 EQU GTIA+$07 + 512 = D008 SIZEP0 EQU GTIA+$08 + 513 = D009 SIZEP1 EQU GTIA+$09 + 514 = D00A SIZEP2 EQU GTIA+$0a + 515 = D00B SIZEP3 EQU GTIA+$0b + 516 = D00C SIZEM EQU GTIA+$0c + 517 = D00D GRAFP0 EQU GTIA+$0d + 518 = D00E GRAFP1 EQU GTIA+$0e + 519 = D00F GRAFP2 EQU GTIA+$0f + 520 = D010 GRAFP3 EQU GTIA+$10 + 521 = D011 GRAFM EQU GTIA+$11 + 522 = D012 COLPM0 EQU GTIA+$12 + 523 = D013 COLPM1 EQU GTIA+$13 + 524 = D014 COLPM2 EQU GTIA+$14 + 525 = D015 COLPM3 EQU GTIA+$15 + 526 = D016 COLPF0 EQU GTIA+$16 + 527 = D017 COLPF1 EQU GTIA+$17 + 528 = D018 COLPF2 EQU GTIA+$18 + 529 = D019 COLPF3 EQU GTIA+$19 + 530 = D01A COLBAK EQU GTIA+$1a + 531 = D01B PRIOR EQU GTIA+$1b + 532 = D01C VDELAY EQU GTIA+$1c + 533 = D01D GRACTL EQU GTIA+$1d + 534 = D01E HITCLR EQU GTIA+$1e + 535 = D01F CONSOL EQU GTIA+$1f + 536 ; + 537 ; READ + 538 ; + 539 = D000 M0PF EQU GTIA+$00 + 540 = D001 M1PF EQU GTIA+$01 + 541 = D002 M2PF EQU GTIA+$02 + 542 = D003 M3PF EQU GTIA+$03 + 543 = D004 P0PF EQU GTIA+$04 + 544 = D005 P1PF EQU GTIA+$05 + 545 = D006 P2PF EQU GTIA+$06 + 546 = D007 P3PF EQU GTIA+$07 + 547 = D008 M0PL EQU GTIA+$08 + 548 = D009 M1PL EQU GTIA+$09 + 549 = D00A M2PL EQU GTIA+$0a + 550 = D00B M3PL EQU GTIA+$0b + 551 = D00C P0PL EQU GTIA+$0c + 552 = D00D P1PL EQU GTIA+$0d + 553 = D00E P2PL EQU GTIA+$0e + 554 = D00F P3PL EQU GTIA+$0f + 555 = D010 TRIG0 EQU GTIA+$10 + 556 = D011 TRIG1 EQU GTIA+$11 + 557 = D012 TRIG2 EQU GTIA+$12 + 558 = D013 TRIG3 EQU GTIA+$13 + 559 = D014 PAL EQU GTIA+$14 + 560 ; + 561 ; + 562 ; --------------------------------------------------------------------------- + 563 = D400 ANTIC EQU $D400 + 564 ; --------------------------------------------------------------------------- + 565 ; + 566 = D400 DMACTL EQU ANTIC+$00 + 567 = D401 CHACTL EQU ANTIC+$01 + 568 = D402 DLPTR EQU ANTIC+$02 + 569 ;DLISTH EQU ANTIC+$03 + 570 = D404 HSCROL EQU ANTIC+$04 + 571 = D405 VSCROL EQU ANTIC+$05 + 572 = D407 PMBASE EQU ANTIC+$07 + 573 = D409 CHBASE EQU ANTIC+$09 + 574 = D40A WSYNC EQU ANTIC+$0a + 575 = D40B VCOUNT EQU ANTIC+$0b + 576 = D40C PENH EQU ANTIC+$0c + 577 = D40D PENV EQU ANTIC+$0d + 578 = D40E NMIEN EQU ANTIC+$0e + 579 = D40F NMIRES EQU ANTIC+$0f + 580 = D40F NMIST EQU ANTIC+$0f + 581 ; + 582 ; + 583 ; --------------------------------------------------------------------------- + 584 = D300 PIA EQU $D300 + 585 ; --------------------------------------------------------------------------- + 586 ; + 587 = D300 PORTA EQU PIA+0 + 588 = D301 PORTB EQU PIA+1 + 589 = D302 PACTL EQU PIA+2 + 590 = D303 PBCTL EQU PIA+3 + 591 ; + 592 ; --------------------------------------------------------------------------- + 593 ; Atari ANTIC chip display list equates + 594 ; --------------------------------------------------------------------------- + 595 ; + 596 = 0001 JUMP EQU $01 ; display list jump instruction (3 byte) + 597 = 0041 JVB EQU $41 ; display list jump and wait for vblank instruction (3) + 598 ; + 599 = 0010 SCH EQU $10 ; display list horizontal scrolling + 600 = 0020 SCV EQU $20 ; display list vertical scrolling + 601 = 0040 LMS EQU $40 ; display list load memory scan instruction (3 byte) + 602 = 0080 DLII EQU $80 ; display list interrupt instruction + 603 ; + 604 = 0000 SKIP1 EQU $00 ; display list skip 1 scan line instruction + 605 = 0010 SKIP2 EQU $10 ; display list skip 2 scan lines instruction + 606 = 0020 SKIP3 EQU $20 ; display list skip 3 scan lines instruction + 607 = 0030 SKIP4 EQU $30 ; display list skip 4 scan lines instruction + 608 = 0040 SKIP5 EQU $40 ; display list skip 5 scan lines instruction + 609 = 0050 SKIP6 EQU $50 ; display list skip 6 scan lines instruction + 610 = 0060 SKIP7 EQU $60 ; display list skip 7 scan lines instruction + 611 = 0070 SKIP8 EQU $70 ; display list skip 8 scan lines instruction + 612 ; + 613 = 0002 MODE2 EQU $02 ; display list mode 2 + 614 = 0004 MODE4 EQU $04 ; display list mode 4 + 615 = 0008 MODE8 EQU $08 ; display list mode 8 + 616 = 000E MODEE EQU $0E ; display list mode E + 617 = 000F MODEF EQU $0F ; display list mode F + 618 ; --------------------------------------------------------------------------- + 619 ; ENUMS + 620 ; --------------------------------------------------------------------------- + 621 + 622 .enum @dmactl + 623 = 0000 blank = %00 + 624 = 0001 narrow = %01 + 625 = 0002 standard= %10 + 626 = 0003 wide = %11 + 627 = 0004 missiles= %100 + 628 = 0008 players = %1000 + 629 = 0010 lineX1 = %10000 + 630 = 0000 lineX2 = %00000 + 631 = 0020 dma = %100000 + 632 .ende + 633 + 634 = 003F scr48 = @dmactl(wide|dma|players|missiles|lineX1) + 635 = 003E scr40 = @dmactl(standard|dma|players|missiles|lineX1) + 636 = 003D scr32 = @dmactl(narrow|dma|players|missiles|lineX1) + 637 + 638 .enum @pmcntl + 639 = 0001 missiles= %1 + 640 = 0002 players = %10 + 641 = 0004 trigs = %100 + 642 .ende + 643 + 644 .enum @gtictl + 645 = 0000 prior0 = %0 + 646 = 0001 prior1 = %1 + 647 = 0002 prior2 = %10 + 648 = 0004 prior4 = %100 + 649 = 0008 prior8 = %1000 + 650 = 0010 ply5 = %10000 ; Fifth Player Enable + 651 = 0020 mlc = %100000 ; Multiple Color Player Enable + 652 = 0040 mode9 = %01000000 + 653 = 0080 mode10 = %10000000 + 654 = 00C0 mode11 = %11000000 + 655 .ende + 656 ; --------------------------------------------------------------------------- + 657 ; KBCODEs + 658 ; --------------------------------------------------------------------------- + 659 .enum @kbcode + 660 = 00FF _none = 255 + 661 = 001C _esc = 28 + 662 = 001F _1 = 31 + 663 = 001E _2 = 30 + 664 = 001A _3 = 26 + 665 = 0018 _4 = 24 + 666 = 001D _5 = 29 + 667 = 001B _6 = 27 + 668 = 0033 _7 = 51 + 669 = 0035 _8 = 53 + 670 = 0030 _9 = 48 + 671 = 0032 _0 = 50 + 672 = 0036 _lt = 54 + 673 = 0037 _gt = 55 + 674 = 0034 _del = 52 + 675 = 002C _tab = 44 + 676 = 002F _Q = 47 + 677 = 002E _W = 46 + 678 = 002A _E = 42 + 679 = 0028 _R = 40 + 680 = 002D _T = 45 + 681 = 002B _Y = 43 + 682 = 000B _U = 11 + 683 = 000D _I = 13 + 684 = 0008 _O = 8 + 685 = 000A _P = 10 + 686 = 000E _min = 14 + 687 = 000E _up = 14 ; cursor function + 688 = 000F _eq = 15 + 689 = 000F _down = 15 ; cursor function + 690 = 000C _ret = 12 + 691 = 003F _A = 63 + 692 = 003E _S = 62 + 693 = 003A _D = 58 + 694 = 0038 _F = 56 + 695 = 003D _G = 61 + 696 = 0039 _H = 57 + 697 = 0001 _J = 1 + 698 = 0005 _K = 5 + 699 = 0000 _L = 0 + 700 = 0002 _semicolon = 2 + 701 = 0006 _plus = 6 + 702 = 0006 _left = 6 ; cursor function + 703 = 0007 _asterisk = 7 + 704 = 0007 _right = 7 ; cursor function + 705 = 003C _caps = 60 + 706 = 0017 _Z = 23 + 707 = 0016 _X = 22 + 708 = 0012 _C = 18 + 709 = 0010 _V = 16 + 710 = 0015 _B = 21 + 711 = 0024 _N = 36 + 712 = 0025 _M = 37 + 713 = 0020 _comma = 32 + 714 = 0022 _dot = 34 + 715 = 0026 _slash = 38 + 716 = 0027 _atari = 39 + 717 = 0011 _help = 17 + 718 = 0003 _F1 = 3 + 719 = 0004 _F2 = 4 + 720 = 0013 _F3 = 19 + 721 = 0014 _F4 = 20 + 722 = 0021 _space = 33 + 723 .ende + 724 = 009B EOL = $9b + 724 = 0080 TEMP_W + 11 icl 'lib/MACRO.ASM' +Source: MACRO.ASM + 1 ;------------------------------------- + 2 .MACRO ROLW + 3 ROL :1 + 4 ROL :1+1 + 5 .ENDM + 6 ;------------------------------------- + 7 .MACRO ASLW + 8 ASL :1 + 9 ROL :1+1 + 10 .ENDM + 11 ;------------------------------------- + 12 .MACRO RORW + 13 ROR :1+1 + 14 ROR :1 + 15 .ENDM + 16 ;------------------------------------- + 17 .MACRO LSRW + 18 LSR :1+1 + 19 ROR :1 + 20 .ENDM + 21 + 22 ;------------------------------------- + 23 .MACRO VMAIN + 24 ; VMAIN #WORD,interrupt.vector + 25 ; interrupt.vector: + 26 ; 0 - VIMIRQ + 27 ; 1 - TIMCNT1 + 28 ; 2 - TIMCNT2 + 29 ; 3 - TIMCNT3 + 30 ; 4 - TIMCNT4 + 31 ; 5 - TIMCNT5 + 32 ; 6 - VVBLKI + 33 ; 7 - VVBLKD + 34 ; 8 - TIMVEC1 + 35 ; 9 - TIMVEC2 + 36 ; Initialises Vertical Blank Interrupts + 37 ; (works only with system interrupts ON) + 38 LDY # <:1 + 39 LDX # >:1 + 40 LDA #:2 + 41 JSR SETVBV + 42 .ENDM + 43 ;------------------------------------- + 44 .MACRO VDLI + 45 ; VDLI #WORD + 46 ; Initialises Display List Interrupts + 47 LDY # <:1 + 48 LDX # >:1 + 49 LDA #$C0 + 50 STY $0200 + 51 STX $0201 + 52 STA NMIEN + 53 .ENDM + 54 ;------------------------------------- + 55 .MACRO VDL + 56 ; VDL #WORD + 57 ; Changes Display List addres + 58 ; and sets width of the screen + 59 ; vdl dl,$01 - narrow screen (32 bytes) + 60 ; vdl dl,$02 - normal screen (40 bytes) + 61 ; vdl dl,$03 - wide screen (48 bytes) + 62 ; (works only with system interrupts ON) + 63 + 64 .if %0=2 + 65 lda dmactls + 66 and #$fc + 67 ora #%2 + 68 sta dmactls + 69 .endif + 70 + 71 LDA # <%1 + 72 STA DLPTRS + 73 LDA # >%1 + 74 STA DLPTRS+1 + 75 .ENDM + 76 ;------------------------------------- + 77 .MACRO halt + 78 ?stop + 79 lda RANDOM + 80 and #$05 + 81 sta COLBAK + 82 jmp ?stop + 83 .ENDM + 84 ;------------------------------------- + 85 .MACRO KEY + 86 ; KEY + 87 ; waits for releasing and pressing "any key" + 88 PHA + 89 ?CK1 LDA SKSTAT + 90 AND #$04 + 91 BEQ ?CK1 + 92 ?CK LDA SKSTAT + 93 AND #$04 + 94 BNE ?CK + 95 PLA + 96 .ENDM + 97 ;------------------------------------- + 98 .MACRO WAIT + 99 ; WAIT + 100 ; waits one frame (1/50 s(PAL) or 1/60s(NTSC)) + 101 ?ze LDA VCOUNT + 102 cmp #16 ; if line<16 then wait for line>15 (long VBI protection) + 103 bcc ?ze + 104 sbc #10 ; last lines correction + 105 ?wa cmp VCOUNT + 106 bcc ?wa + 107 ?wf cmp VCOUNT + 108 bcs ?wf + 109 .ENDM + 110 ;------------------------------------- + 111 .macro waitRTC + 112 lda RTCLOK+2 + 113 ?wa cmp RTCLOK+2 + 114 beq ?wa + 115 .endm + 116 ;------------------------------------- + 117 .macro negw + 118 ; negate the given word (0-a) + 119 ;------------------------------------- + 120 sec + 121 lda #$00 + 122 sbc :1 + 123 sta :1 + 124 lda #$00 + 125 sbc :1+1 + 126 sta :1+1 + 127 .endm + 128 ;------------------------------------- + 129 .macro randomize + 130 ;usage: randomize floor ceiling + 131 ;returns (in A) a random .byte between "floor" and "ceiling" + 132 .if :2 < :1 + 133 .error "floor higher than ceiling" + 134 .endif + 135 ?rand + 136 lda random + 137 cmp #:2+1-:1 ;ceiling + 138 bcs ?rand + 139 .if %1>0 ; if floor = 0 - no add offset + 140 adc #:1 + 141 .endif + 142 .endm + 143 ;------------------------------------- + 144 .macro phx + 145 txa + 146 pha + 147 .endm + 148 ;------------------------------------- + 149 .macro phy + 150 tya + 151 pha + 152 .endm + 153 ;------------------------------------- + 154 .macro plx + 155 pla + 156 tax + 157 .endm + 158 ;------------------------------------- + 159 .macro ply + 160 pla + 161 tay + 162 .endm + 163 ;------------------------------------- + 164 .macro txy + 165 txa + 166 tay + 167 .endm + 168 ;------------------------------------- + 169 .macro tyx + 170 tya + 171 tax + 172 .endm + 173 ;------------------------------------- + 174 .macro pause + 175 ;waits :1 number (byte) of frames + 176 ldx #:1 + 177 ?PAUSELOOP + 178 wait + 179 dex + 180 bne ?PAUSELOOP + 181 .ENDM + 182 + 12 ;--------------------------------------------------- + 13 ; dark screean and BASIC off + 14 ORG $2000 + 15 FFFF> 2000-2024> A9 00 + mva #0 dmactls ; dark screen + 16 2005 A9 FF 8D 01 D3 mva #$ff portb + 17 ; and wait one frame :) + 18 200A F0 13200C wait +Macro: WAIT [Source: MACRO.ASM] + 3 200C AD 0B D4 ?ze LDA VCOUNT + 4 200F C9 10 cmp #16 ; if line<16 then wait for line>15 (long VBI protection) + 5 2011 90 F9 bcc ?ze + 6 2013 E9 0A sbc #10 ; last lines correction + 7 2015 CD 0B D4 ?wa cmp VCOUNT + 8 2018 90 FB bcc ?wa + 9 201A CD 0B D4 ?wf cmp VCOUNT + 10 201D B0 FB bcs ?wf +Source: dino.asm + seq:wait ; or waitRTC ? + 19 201F A9 FF 8D 01 D3 mva #$ff portb ; BASIC off + 20 2024 60 rts + 21 02E2-02E3> 00 20 ini $2000 + 22 ;--------------------------------------------------- + 23 + 24 org $2000 + 25 ;--------------------------------------------------- + 26 ; 4 charsets for fine scroll + 27 2000 font1 + 28 2000-23FF> 00 00 00 00 + ins 'artwork/dino.fnt' ; first charset + 29 = 2400 font2 = font1+$400 + 30 = 2800 font3 = font2+$400 + 31 = 2C00 font4 = font3+$400 + 32 org font4+$400 + 33 ; screen data + 34 ; 8 lines 256bytes each + 35 3000 screen + 36 org screen+($100*8) + 37 ; display list + 38 3800 GameDL + 39 3800-3968> 70 70 70 70 + .byte $70,$70,$70,$70,$70 ; empty lines + 40 3805 52 .byte $02+$40+$10 ; gr.0+LMS+HSCRL + 41 3806 line1_addr + 42 3806 00 30 .word screen + 43 3808 52 .byte $02+$40+$10 ; gr.0+LMS+HSCRL + 44 3809 line2_addr + 45 3809 00 31 .word screen+$100 + 46 380B 52 .byte $02+$40+$10 ; gr.0+LMS+HSCRL + 47 380C line3_addr + 48 380C 00 32 .word screen+$200 + 49 380E 52 .byte $02+$40+$10 ; gr.0+LMS+HSCRL + 50 380F line4_addr + 51 380F 00 33 .word screen+$300 + 52 3811 52 .byte $02+$40+$10 ; gr.0+LMS+HSCRL + 53 3812 line5_addr + 54 3812 00 34 .word screen+$400 + 55 3814 52 .byte $02+$40+$10 ; gr.0+LMS+HSCRL + 56 3815 line6_addr + 57 3815 00 35 .word screen+$500 + 58 3817 52 .byte $02+$40+$10 ; gr.0+LMS+HSCRL + 59 3818 line7_addr + 60 3818 00 36 .word screen+$600 + 61 381A 52 .byte $02+$40+$10 ; gr.0+LMS+HSCRL + 62 381B line8_addr + 63 381B 00 37 .word screen+$700 + 64 381D 41 .byte $41 ;JVB + 65 381E 00 38 .word GameDL + 66 + 67 ;--------------------------------------------------- + 68 3820 FirstSTART + 69 3820 20 55 38 jsr GenerateCharsets + 70 3823 20 E6 38 jsr SetGameScreen + 71 3826 A2 05 ldx #5 ; position + 72 3828 A0 00 ldy #0 ; shape + 73 382A 20 8B 38 jsr ShowDino + 74 382D A2 0A ldx #10 ; position + 75 382F A0 01 ldy #1 ; shape + 76 3831 20 8B 38 jsr ShowDino + 77 3834 A2 0F ldx #15 ; position + 78 3836 A0 02 ldy #2 ; shape + 79 3838 20 8B 38 jsr ShowDino + 80 383B A2 14 ldx #20 ; position + 81 383D A0 03 ldy #3 ; shape + 82 383F 20 8B 38 jsr ShowDino + 83 3842 A2 19 ldx #25 ; position + 84 3844 A0 04 ldy #4 ; shape + 85 3846 20 8B 38 jsr ShowDino + 86 + 87 3849 halt +Macro: HALT [Source: MACRO.ASM] + 1 3849 ?stop + 2 3849 AD 0A D2 lda RANDOM + 3 384C 29 05 and #$05 + 4 384E 8D 1A D0 sta COLBAK + 5 3851 4C 49 38 jmp ?stop +Source: dino.asm + 88 3854 60 rts + 89 + 90 ;----------------------------------------------- + 91 ; Generation of character sets 2,3 and 4 of 1 + 92 ; By copying and horizontal shift dino + 93 ;----------------------------------------------- + 94 3855 .proc GenerateCharsets + 95 ; copy charset 1 to 2,3 and 4 + 96 3855 A0 00 ldy #0 + 97 3857 CopyLoop + 98 3857 B9 00 20 lda font1,y + 99 385A 99 00 24 sta font2,y + 100 385D 99 00 28 sta font3,y + 101 3860 99 00 2C sta font4,y + 102 3863 B9 00 21 lda font1+$100,y + 103 3866 99 00 25 sta font2+$100,y + 104 3869 99 00 29 sta font3+$100,y + 105 386C 99 00 2D sta font4+$100,y + 106 386F B9 00 22 lda font1+$200,y + 107 3872 99 00 26 sta font2+$200,y + 108 3875 99 00 2A sta font3+$200,y + 109 3878 99 00 2E sta font4+$200,y + 110 387B B9 00 23 lda font1+$300,y + 111 387E 99 00 27 sta font2+$300,y + 112 3881 99 00 2B sta font3+$300,y + 113 3884 99 00 2F sta font4+$300,y + 114 3887 C8 iny + 115 3888 D0 CD bne CopyLoop + 116 ; and shifting dino shape + 117 + 118 388A 60 rts + 119 .endp + 120 + 121 ;----------------------------------------------- + 122 ; Show Dino on screen (test) + 123 ; X - y position + 124 ; Y - shape nr + 125 ;----------------------------------------------- + 126 388B .proc ShowDino + 127 388B B9 5F 39 lda ShapesTableL,y + 128 388E 85 80 sta temp_w + 129 3890 B9 64 39 lda ShapesTableH,y + 130 3893 85 81 sta temp_w+1 + 131 3895 A0 00 ldy #0 + 132 3897 DinoLoop + 133 3897 B1 80 lda (temp_w),y + 134 3899 30 03 bmi @+ + 135 389B 9D 00 34 sta screen+$400,x + 136 389E 18 A5 80 69 05 85 + @ adw temp_w #5 + 137 38A9 B1 80 lda (temp_w),y + 138 38AB 30 03 bmi @+ + 139 38AD 9D 00 35 sta screen+$500,x + 140 38B0 18 A5 80 69 05 85 + @ adw temp_w #5 + 141 38BB B1 80 lda (temp_w),y + 142 38BD 30 03 bmi @+ + 143 38BF 9D 00 36 sta screen+$600,x + 144 38C2 18 A5 80 69 05 85 + @ adw temp_w #5 + 145 38CD B1 80 lda (temp_w),y + 146 38CF 30 03 bmi @+ + 147 38D1 9D 00 37 sta screen+$700,x + 148 38D4 38 A5 80 E9 0F 85 + @ sbw temp_w #15 + 149 38DF E8 inx + 150 38E0 C8 iny + 151 38E1 C0 05 cpy #5 ; dino width + 152 38E3 D0 B2 bne DinoLoop + 153 38E5 60 rts + 154 .endp + 155 ;----------------------------------------------- + 156 ; Generation of character sets 2,3 and 4 of 1 + 157 ; By copying and horizontal shift dino + 158 ;----------------------------------------------- + 159 38E6 .proc SetGameScreen + 160 38E6 A9 00 8D 30 02 A9 + mwa #GameDL dlptrs + 161 38F0 A9 3E lda #%00111110 ; normal screen width, DL on, P/M on + 162 38F2 8D 2F 02 sta dmactls + 163 38F5 A9 20 8D F4 02 mva #>font1 chbas + 164 38FA 60 rts + 165 .endp + 166 ;-------------------------------------------------- + 167 38FB icl 'artwork/shapes.asm' +Source: shapes.asm + 1 ; @com.wudsn.ide.asm.mainsourcefile=scorch.asm + 2 + 3 .IF *>0 ;this is a trick that prevents compiling this file alone + 4 + 5 ; dno run + 6 38FB dino_run_0 ; anly '0' jumps + 7 38FB FF 23 27 2B FF .by $ff, $23, $27, $2b, $ff ; '. ' + 8 3900 20 24 28 2C FF .by $20, $24, $28, $2c, $ff ; ' ## ' + 9 3905 21 25 29 FF FF .by $21, $25, $29, $ff, $ff ; '## .' + 10 390A 22 26 2A FF FF .by $22, $26, $2a, $ff, $ff ; '## .' + 11 390F dino_run_1 + 12 390F FF 23 27 2B FF .by $ff, $23, $27, $2b, $ff ; '. ' + 13 3914 20 24 28 2C FF .by $20, $24, $28, $2c, $ff ; ' ## ' + 14 3919 21 25 29 FF FF .by $21, $25, $29, $ff, $ff ; '## .' + 15 391E 2D 2E 2F FF FF .by $2d, $2e, $2f, $ff, $ff ; '## .' + 16 3923 dino_run_2 + 17 3923 FF 23 27 2B FF .by $ff, $23, $27, $2b, $ff ; '. ' + 18 3928 20 24 28 2C FF .by $20, $24, $28, $2c, $ff ; ' ## ' + 19 392D 21 25 29 FF FF .by $21, $25, $29, $ff, $ff ; '## .' + 20 3932 30 31 32 FF FF .by $30, $31, $32, $ff, $ff ; '## .' + 21 3937 dino_crouch_1 + 22 3937 FF FF FF FF FF .by $ff, $ff, $ff, $ff, $ff + 23 393C FF FF FF FF FF .by $ff, $ff, $ff, $ff, $ff + 24 3941 33 34 35 36 37 .by $33, $34, $35, $36, $37 ; '#### ' + 25 3946 38 39 3A 3B 3C .by $38, $39, $3a, $3b, $3c ; '#### ' + 26 394B dino_crouch_2 + 27 394B FF FF FF FF FF .by $ff, $ff, $ff, $ff, $ff + 28 3950 FF FF FF FF FF .by $ff, $ff, $ff, $ff, $ff + 29 3955 33 34 35 36 37 .by $33, $34, $35, $36, $37 ; '#### ' + 30 395A 3D 3E 3F 3B 3C .by $3d, $3e, $3f, $3b, $3c ; '#### ' + 31 395F ShapesTableL + 32 395F FB .by dino_run_0 + 39 3965 39 .by >dino_run_1 + 40 3966 39 .by >dino_run_2 + 41 3967 39 .by >dino_crouch_1 + 42 3968 39 .by >dino_crouch_2 + 43 + 44 .endif ; .IF *>0 + 168 ;-------------------------------------------------- + 169 + 170 02E0-02E1> 20 38 run FirstSTART diff --git a/dino.xex b/dino.xex new file mode 100644 index 0000000..aab280e Binary files /dev/null and b/dino.xex differ