atari8: started on js platform

This commit is contained in:
Steven Hugg 2022-08-29 21:00:52 -05:00
parent e4af92927d
commit ed7758d7e0
36 changed files with 26599 additions and 75 deletions

View File

@ -203,7 +203,7 @@ if (window.location.host.endsWith('8bitworkshop.com')) {
<li class="dropdown dropdown-submenu">
<a tabindex="-1" href="#">MAME/Other</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="?platform=atari8-800xl.mame">Atari 800XL (MAME)</a></li>
<li><a class="dropdown-item" href="?platform=atari8-800.xlmame">Atari 800XL (MAME)</a></li>
<li><a class="dropdown-item" href="?platform=atari8-5200.mame">Atari 5200 (MAME)</a></li>
<hr>
<li><a class="dropdown-item" href="?platform=vcs.stellerator">Atari 2600 (Stellerator)</a></li>

View File

@ -1,4 +1,4 @@
; Atari 8-bit "Hello World" sample code
; Written by Daniel Boris (danlb_2000@yahoo.com)
; Modified by Steven Hugg @8bitworkshop
@ -10,7 +10,7 @@
include "atari.inc"
org $a000 ;Start of left cartridge area
Start
Start
ldx #(dlistend-dlist)
dlloop ;Create Display List
lda dlist,x ;Get byte
@ -20,15 +20,16 @@ dlloop ;Create Display List
lda #$06
sta CHACTL ;Set Character Control
lda #$84 ;Set color PF2
sta COLOR0+2
sta COLOR0+4 ; bakground
lda #$0F ;Set color PF1
sta COLOR0+1
lda #$3f
lda #$28
sta COLOR0+0
lda #$0F
sta COLOR0+1
lda #$d6
sta COLOR0+2
lda #$58
sta COLOR0+3
lda #$84
sta COLOR0+4 ; bakground
lda #$00 ;Set Display list pointer
sta SDLSTL ;Shadow DLISTL
lda #$10
@ -36,6 +37,7 @@ dlloop ;Create Display List
lda #$e0 ;Set Charcter Set Base
sta CHBAS
lda #$22 ;Enable DMA
lda #$21
sta SDMCTL ;Shadow DMACTL
print
@ -53,23 +55,38 @@ lower
iny ;Next character
bne prloop
wait
lda $d40b
lda $d20f
sta COLBK
nop
jmp wait
;Display list data (starts at $1000)
dlist .byte $70,$70,$70 ;24 blank scanlines
.byte $42,$00,$18,$02 ;mode 2 @ $1800
.byte $43,$00,$18,$02 ;mode 3 @ $1800
.byte $44,$00,$18,$02 ;mode 4 @ $1800
.byte $45,$00,$18,$02 ;mode 5 @ $1800
.byte $46,$00,$18,$06 ;mode 6 @ $1800
.byte $47,$00,$18,$06 ;mode 7 @ $1800
dlist .byte $70,$70 ;16 blank scanlines
.byte $42,$00,$18,$02,$70 ;mode 2 @ $1800
.byte $43,$00,$18,$70 ;mode 3 @ $1800
.byte $44,$00,$18,$70 ;mode 4 @ $1800
.byte $45,$00,$18,$70 ;mode 5 @ $1800
.byte $46,$00,$18,$70 ;mode 6 @ $1800
.byte $47,$00,$18,$70 ;mode 7 @ $1800
.byte $48,$00,$18,$08,$70 ;mode 2 @ $1800
.byte $49,$00,$18,$70 ;mode 3 @ $1800
.byte $4a,$00,$18,$70 ;mode 4 @ $1800
.byte $4b,$00,$18,$70 ;mode 5 @ $1800
.byte $4c,$00,$18,$70 ;mode 6 @ $1800
.byte $4d,$00,$18,$70 ;mode 7 @ $1800
.byte $4e,$00,$18,$70 ;mode 7 @ $1800
.byte $4f,$00,$18,$70 ;mode 7 @ $1800
.byte $41,$00,$10 ;JMP -> $1000
dlistend
;Text data
text1 .byte "Hello World! "
text1 .byte "Hejjo World! "
.byte $a1,$a2,$a3
.repeat 40
.byte 32
.repend
.byte "oops!"
.byte 0
;Cartridge footer

839
res/altirra/kernel.lab Normal file
View File

@ -0,0 +1,839 @@
mads 2.1.0
Label table:
00 0000 _KERNEL_PBI_SUPPORT
00 0000 _KERNEL_USE_BOOT_SCREEN
00 0001 _KERNEL_PRINTER_SUPPORT
00 D800 _AFP
00 D800 AFP
00 00E6 AFP.DOTFLAG
00 00E7 AFP.XINVERT
00 00E8 AFP.CIX0
00 00E9 AFP.SIGN
00 00EA AFP.DIGIT2
00 D820 AFP.ISPLUS
00 D821 AFP.POSTSIGN
00 D835 AFP.TINY_DENORM_LOOP
00 D83E AFP.TINY_DENORM_LOOP_EXIT
00 D83E AFP.NOT_TINY
00 D840 AFP.NEXTDIGIT
00 D862 AFP.WRITEHI
00 D86A AFP.AFTERWRITE
00 D873 AFP.ISDOT
00 D87B AFP.TERMCHECK
00 D880 AFP.TERM
00 D882 AFP.TERM_ROLLBACK_EXP
00 D88A AFP.DIGITSHIFT
00 D897 AFP.NODIGITSHIFT
00 D89A AFP.ERR_CARRYSET
00 D89B AFP.ISEXP
00 D8AF AFP.ISEXPPLUS
00 D8B0 AFP.POSTEXPSIGN
00 D8C3 AFP.NOTEXPZERO2
00 D8CE AFP.EXPTERM
00 D8D1 FP_FMUL_CARRYUP
00 D8D1 FP_FMUL_CARRYUP.ROUND_LOOP
00 D8D5 FP_FMUL_CARRYUP.DEC_ENTRY
00 D8DB FP_TAB_LO_100
00 D8E6 _FASC
00 D8E6 FASC
00 00F7 FASC.DOTCNTR
00 00F8 FASC.EXPVAL
00 00F9 FASC.TRIMBASE
00 D8F4 FASC.NOTZERO
00 D906 FASC.ISPOS
00 D91A FASC.NOEXP
00 D921 FASC.NOT_TINY
00 D935 FASC.DIGITLOOP
00 D93E FASC.NO_HIDOT
00 D949 FASC.WRITELOW
00 D952 FASC.NO_LODOT
00 D964 FASC.LZLOOP
00 D96D FASC.STOP_ZERO_TRIM
00 D973 FASC.SKIP_ZERO_TRIM
00 D976 FASC.NO_TRAILING_DOT
00 D989 FASC.EXPPOS
00 D98B FASC.EXPNEG
00 D992 FASC.TENSLOOP
00 D9A0 FASC.NOEXP2
00 D9AA IPF
00 D9B4 IPF.BYTELOOP
00 D9D2 FPI
00 00E6 FPI._ACC0
00 00E7 FPI._ACC1
00 DA36 FPI.DONE
00 DA38 FPI.ERR
00 DA39 FP_MUL10
00 DA44 ZFR0
00 DA46 ZF1
00 DA48 ZFL
00 DA4A ZFLLOOP
00 DA51 LDBUFA
00 DA5A FPILL_SHL16
00 DA66 FADD
00 DA60 FSUB
00 00E0 FSUB._DIFFMODE
00 DA66 FSUB._FADD
00 DA7C FSUB.SWAP
00 DA81 FSUB.NOSWAP
00 DA96 FSUB.ADD_NO_ROUND
00 DA9B FSUB.ADD_LOOP
00 DAA6 FSUB.POST_ADD_LOOP
00 DAAA FSUB.SUM_CARRYLOOP
00 DAB2 FSUB.SUM_CARRYLOOP_START
00 DAB8 FSUB.SUM_XIT
00 DABB FSUB.DO_SUBTRACT
00 DABF FSUB.SUB_LOOP
00 DAC7 FSUB.SUB_LOOP_ENTRY
00 DACD FP_DECTOBIN
00 DAD4 FP_EXIT_SUCCESS
00 DAD6 FP_FLD1R_CONST_FMUL
00 DAD8 FP_FLD1R_FMUL
00 DADB FMUL
00 00DF FMUL._OFFSET
00 00E6 FMUL._OFFSET2
00 DAF9 UNDERFLOW_OVERFLOW
00 DAFB FP_EXIT_ZERO
00 DAFE FP_ADJUST_EXPONENT
00 DAFE FP_ADJUST_EXPONENT.FDIV_ENTRY
00 DB03 FP_ADJUST_EXPONENT.FMUL_ENTRY
00 DB1C FPCONST_TEN
00 DB22 FPCONST_LN10
00 DB28 FDIV
00 00DB FDIV._DIGIT
00 00DC FDIV._INDEX
00 DB36 FDIV.DIGITLOOP
00 DB43 FDIV.INCLOOP
00 DB49 FDIV.DOWNLOOP
00 DB79 FDIV.NEXTDIGIT
00 DB7C FDIV.BITLOOP
00 DB9C FDIV.OK
00 DB9E FDIV.ERR
00 DBA1 SKPSPC
00 DBA5 FP_SKIPCHAR
00 DBA5 SKPSPC_LOOP
00 DBAC SKPSPC_XIT
00 DBAF ISDIGT
00 DBAF _ISDIGT
00 DBB1 FP_ISDIGIT_Y
00 DBB9 FP_FDIV_DECLOOP
00 DBB9 FP_FDIV_DECLOOP.DECLOOP
00 DBBD FP_FDIV_DECLOOP.UPLOOP
00 DBEE FP_FDIV_COMPLETE
00 DBF8 FP_FDIV_COMPLETE.NO_NORMSTEP
00 DBFF FP_NORMALIZE_CLD
00 DC00 FP_NORMALIZE
00 DC00 NORMALIZE
00 DC02 NORMALIZE.NORMLOOP
00 DC13 NORMALIZE.NEED_NORM
00 DC17 NORMALIZE.NORMLOOP2
00 DC27 NORMALIZE.XIT
00 DC29 NORMALIZE.UNDERFLOW2
00 DC2A NORMALIZE.UNDERFLOW
00 DC2D FP_FDIV_INIT
00 DC46 FP_FDIV_INIT.BITLOOP
00 DC55 FP_FDIV_INIT.START_WITH_ONES
00 DC5E FP_FSUB_CONT
00 DC62 FP_FSUB_CONT.BORROW_LOOP
00 DC6A FP_FSUB_CONT.BORROW_LOOP_START
00 DC70 FP_FSUB_CONT.DIFF_BORROW
00 DC7F FP_FSUB_CONT.SUB_XIT
00 DC7F FP_FSUB_CONT.NORM_LOOP
00 DC97 FP_FSUB_CONT.NO_ROUND
00 DC9A FP_FSUB_CONT.NEED_NORM
00 DC9C FP_FSUB_CONT.SCAN_LOOP
00 DCA5 FP_FSUB_CONT.UNDERFLOW2
00 DCA6 FP_FSUB_CONT.UNDERFLOW
00 DCAA FP_FSUB_CONT.FOUND_POS
00 DCAC FP_FSUB_CONT.SHIFT_LOOP
00 DCB5 FP_FSUB_CONT.CLEAR_LOOP
00 DCBE FP_FSUB_CONT.ROUND_UP
00 DCC3 FP_FMUL_INNERLOOP
00 00DF FP_FMUL_INNERLOOP._OFFSET
00 00E6 FP_FMUL_INNERLOOP._OFFSET2
00 DCCC FP_FMUL_INNERLOOP.OFFLOOP
00 DCCE FP_FMUL_INNERLOOP.OFFLOOP2
00 DCFF FP_FMUL_INNERLOOP.NO_CARRY
00 DCFF FP_FMUL_INNERLOOP.NOADD
00 DD35 FP_FMUL_INNERLOOP.RENORM_NEEDED
00 DD3E FP_PLYEVL_10
00 DD40 PLYEVL
00 DD50 PLYEVL.LOOP
00 DD73 PLYEVL.XIT
00 DD74 FP_SWAP
00 DD76 FP_SWAP.SWAPLOOP
00 DD87 FLD0R_ZP
00 DD89 FLD0R
00 DD8D FLD0P
00 DD8F FLD0PLOOP
00 DD98 FLD1R
00 DD9C FLD1P
00 DD9E FLD1PLOOP
00 DDA7 FST0R
00 DDAB FST0P
00 DDAD FST0PLOOP
00 DDB6 FMOVE
00 DDB8 FMOVELOOP
00 DDCC EXP10
00 DDC0 EXP
00 DDCC EXP._EXP10
00 DDDC EXP.ABS_TOO_BIG
00 DDE4 EXP.ABS_LARGE
00 DDF8 EXP.ABS_OK
00 DE0C EXP.EVEN
00 DE27 EXP.ERR2
00 DE27 EXP.XIT2
00 DE28 EXP.COEFF
00 DE64 FPCONST_LOG10_E
00 DE6A FP_CARRY_EXPUP
00 DE6E FP_CARRY_EXPUP.SUM_SHIFTLOOP
00 DE79 FP_FMUL_FR0_TO_BINFR2
00 DE7B FP_FMUL_FR0_TO_BINFR2.LOOP
00 DE8F FP_RTS1
00 DE95 REDRNG
00 DE95 _REDRNG
00 DE8F _REDRNG.FAIL
00 DED1 LOG10
00 DECD LOG
00 DED1 LOG._LOG10
00 DED4 LOG.ENTRY
00 DEF1 LOG.MID_RANGE
00 DEF8 LOG.ADJUST_EXPONENT
00 DEFC LOG.POST_RANGE_ADJUST
00 DF2F LOG.EXPADJ_POSITIVE
00 DF46 LOG.ERR
00 DF47 LOG.XIT2
00 DF47 LOG.ERR2
00 DF48 FP_TAB_LO_1000
00 DF52 FP_TAB_HI_1000
00 DF5C FP_TAB_HI_100
00 DF66 FP_TAB_HI_10000
00 DF6C FPCONST_HALF
00 DF72 FPCONST_LOG10COEFF
00 DFAE ATNCOEF
00 DFEA FP_ONE
00 DFF0 FP_PI4
00 DFF6 FP_DECTOBIN_TAB
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 BLACKBOARD
00 E494 BLACKBOARD.ECHOLOOP
00 E4A6 BLACKBOARD_BANNER
00 E4C0 KNOWNRTS
00 E4C1 REVERSEDBITMASKS
00 E4C9 CIOEXITSUCCESS
00 E4CB CIOEXITSUCCESS.EXIT_NOT_SUPPORTED
00 E4CB CIOEXITNOTSUPPORTED
00 E4CC BELL
00 E4CF BELL.SOUNDLOOP
00 E4D2 BELL.DELAY
00 E4EA CIOINIT
00 E4ED CIOINIT.IOCB_LOOP
00 E4FC CIO
00 E503 CIO.XIT
00 E50E CIO.PROCESS
00 E516 CIO.CMDINVALID
00 E519 CIO.VALIDIOCB
00 E528 CIO.NOT_OPEN
00 E534 CIO.NOT_OPEN_HANDLER
00 E536 CIO.IGNOREOPEN
00 E537 CIO.PREOPEN
00 E544 CIO.ISOPEN
00 E555 CIO.SKIP_PERM_CHECK
00 E560 CIO.LOAD_VECTOR
00 E57B CIO.PERM_CHECK_FAIL
00 E580 CIO.CMDGETSTATUSSOFTOPEN
00 E583 CIO.CMDSPECIALSOFTOPEN
00 E585 CIO.INVOKE_AND_SOFT_CLOSE_XIT
00 E588 CIO.CMDOPEN
00 E590 CIO.NOTALREADYOPEN
00 E593 CIO.OPEN_ENTRY
00 E5A8 CIO.OPENOK
00 E6C2 CIO.CMDGETSTATUS
00 E5C6 CIO.CMDSPECIAL
00 E5D6 CIO.CMDGETRECORD
00 E5D8 CIO.CMDGETRECORDLOOP
00 E5D8 CIO.CMDGETRECORDGETBYTE
00 E5EE CIO.CMDGETRECORDBUFFERFULL
00 E5FB CIO.CMDGETRECORDXIT
00 E5FB CIO.CMDGETPUTDONE
00 E61D CIO.CMDGETCHARS
00 E61F CIO.CMDGETCHARSLOOP
00 E631 CIO.CMDGETCHARSERROR
00 E634 CIO.CMDGETCHARSSINGLE
00 E63A CIO.CMDPUTRECORD
00 E63C CIO.CMDPUTRECORDLOOP
00 E653 CIO.CMDPUTRECORDEOL
00 E658 CIO.CMDPUTRECORDERROR
00 E658 CIO.CMDPUTRECORDDONE
00 E65B CIO.CMDPUTCHARS
00 E65D CIO.CMDPUTCHARSLOOP
00 E66F CIO.CMDPUTCHARSSINGLE
00 E672 CIO.ADVANCE_POINTERS
00 E685 CIO.CMDCLOSE
00 E688 CIO.CMDCLOSEPROVISIONAL
00 E693 CIO.PERM_CHECK_TABLE
00 E69E CIO.VECTOR_PRELOAD_TABLE
00 E6A9 CIO.COMMAND_TABLE_LO
00 E6B4 CIO.COMMAND_TABLE_HI
00 E6BF CIOINVOKE
00 E6C2 CIOINVOKE.INVOKE_VECTOR
00 E6C4 CIOINVOKE.INVOKE_VECTOR_CIOCHR
00 E6D1 CIOLOADZIOCB
00 E6D3 CIOLOADZIOCB.COPYTOZIOCB
00 E6E0 CIOPARSEPATH
00 E6F5 CIOPARSEPATH.NODEVNUM
00 E6FC CIOPARSEPATH.UNKNOWN_DEVICE
00 E700 CIOPARSEPATH.FOUND
00 E701 CIOSETPUTBYTECLOSED
00 E70C CIOFINDHANDLER
00 E710 CIOFINDHANDLER.FINDHANDLER
00 E71A CIOFINDHANDLER.FOUNDHANDLER
00 E761 VBIEXIT
00 E71D VBISTAGE1
00 E772 VBISTAGE2
00 E71D VBIPROCESS
00 E71D VBIPROCESS.STAGE_1
00 E729 VBIPROCESS.CLOCK_DONE
00 E737 VBIPROCESS.ATTRACT_OFF
00 E750 VBIPROCESS.TIMER1_LOBYTEZERO
00 E75D VBIPROCESS.TIMER1_DONE
00 E761 VBIPROCESS.XIT
00 E765 VBIPROCESS.EXIT_A
00 E766 VBIPROCESS.EXIT_NONE
00 E767 VBIPROCESS.TIMER1_DISPATCH
00 E76A VBIPROCESS.NO_CRITIC
00 E772 VBIPROCESS.STAGE_2
00 E79C VBIPROCESS.COLORLOOP
00 E7B5 VBIPROCESS.TIMER_N_LOOP
00 E7BF VBIPROCESS.TIMER_N_NOT_EXPIRED
00 E7C2 VBIPROCESS.TIMER_N_NOT_RUNNING
00 E7E1 VBIPROCESS.NO_REPEAT_KEY
00 E7E6 VBIPROCESS.NO_REPEAT
00 E7EE VBIPROCESS.NO_KEYDEL
00 E7F0 VBIPROCESS.POT_LOOP
00 E800 VBIPROCESS.TRIG_LOOP
00 E82F VBIPROCESS.TIMER2DISPATCH
00 E832 VBIPROCESS.DO_STICK_PTRIGS
00 E851 VBIDECREMENTTIMER
00 E85D VBIDECREMENTTIMER.LOZERO_HINONZERO
00 E860 VBIDECREMENTTIMER.LONONZERO
00 E868 VBIDECREMENTTIMER.STILL_RUNNING
00 E869 VBISETVECTOR
00 E87F INTINITINTERRUPTS
00 E885 INTDISPATCHNMI
00 E88D INTDISPATCHNMI.IS_SYSTEM_RESET
00 E890 INTDISPATCHNMI.NOT_DLI
00 E8A2 INTDISPATCHIRQ
00 E765 INTEXITHANDLER_A
00 E766 INTEXITHANDLER_NONE
00 E8CD IRQHANDLER
00 E8A5 _IRQHANDLER
00 E8A5 _IRQHANDLER.DISPATCH_SEROUT
00 E8AD _IRQHANDLER.CHECK_SEROC
00 E8B2 _IRQHANDLER.DISPATCH_SEROC
00 E8B5 _IRQHANDLER.DISPATCH_TIMER1
00 E8BD _IRQHANDLER.DISPATCH_TIMER2
00 E8C5 _IRQHANDLER.DISPATCH_TIMER4
00 E8CD _IRQHANDLER._ENTRY
00 E8E2 _IRQHANDLER.NOT_SERIN
00 E8EE _IRQHANDLER.NOT_SEROC
00 E91C _IRQHANDLER.NOT_BRK
00 E920 _IRQHANDLER.DISPATCH_KEYBOARD
00 E928 _IRQHANDLER.DISPATCH_BREAK
00 E930 _IRQHANDLER.DISPATCH_PIA_IRQA
00 E936 _IRQHANDLER.DISPATCH_PIA_IRQB
00 E93C IRQACKNOWLEDGE
00 E945 SIOINIT
00 E950 SIO
00 E976 SIO.RETRY_COMMAND
00 E97B SIO.RETRY_COMMAND_2
00 E9A4 SIO.CMDDELAY
00 E9C9 SIO.COMMAND_ERROR
00 E9D3 SIO.ACKOK
00 E9E5 SIO.NO_SEND_FRAME
00 EA1C SIO.DEVICE_ERROR
00 EA1E SIO.TRANSFER_ERROR
00 EA29 SIO.DEVICE_RETRIES_EXHAUSTED
00 EA29 SIO.XIT
00 EA3A SIO.LEAVE_CASSETTE_AUDIO_ON
00 EA3E SIO.XIT_PBI
00 EA4A SIO.COMPLETEOK
00 EA57 SIO.NO_RECEIVE_FRAME
00 EA65 SIOSETTIMEOUTVECTOR
00 EA70 SIOWAITFORACK
00 EA98 SIOWAITFORACK.XIT
00 EAB8 SIOINITHARDWARE
00 EA99 SIOSENDENABLE
00 EAA4 SIOSENDENABLE.NO_IRQ_SETUP
00 EAB8 SIOSENDENABLE.INIT_HARDWARE
00 EAC1 SIOSENDENABLE.NOT_CASSETTE
00 EAC1 SIOINITPOKEYWITHREGOFFSETX
00 EAE8 SIOSENDENABLE.NO_NOISE
00 EAEC SIOSENDENABLE.REGDATA
00 EAEC SIOSENDENABLE.REGDATA_NORMAL
00 EAF5 SIOSENDENABLE.REGDATA_CASSETTE_WRITE
00 EAFE SIOSENDENABLE.REGDATA_CASSETTE_READ
00 EB07 SIOSETUPBUFFERPOINTERS
00 EB1D SIOSEND
00 EB31 SIOSEND.WAIT
00 EB3B SIOSEND.BREAK_DETECTED
00 EB3F SIOSEND.SEND_COMPLETED
00 EB4C SIORECEIVE
00 EB4E SIORECEIVE.USE_CHECKSUM
00 EB76 SIORECEIVE.WAIT
00 EB84 SIORECEIVE.ERROR
00 EB86 SIORECEIVE.TIMEOUT
00 EB8A SIORECEIVESTOP
00 EB95 SIOINPUTREADYHANDLER
00 EBC1 SIOINPUTREADYHANDLER.XIT
00 EBC3 SIOINPUTREADYHANDLER.RECEIVECHECKSUM
00 EBCA SIOINPUTREADYHANDLER.SIGNAL_END
00 EBD0 SIOINPUTREADYHANDLER.CHECKSUM_FAIL
00 EBD6 SIOINPUTREADYHANDLER.SKIPCHECKSUM
00 EBDE SIOOUTPUTREADYHANDLER
00 EBE4 SIOOUTPUTREADYHANDLER.ADDRCC
00 EC01 SIOOUTPUTREADYHANDLER.DOCHECKSUM
00 EC17 SIOOUTPUTCOMPLETEHANDLER
00 EC26 SIOOUTPUTCOMPLETEHANDLER.XIT
00 EC28 SIOCOUNTDOWN1HANDLER
00 EC2E SIOCASSETTE
00 EC3E SIOCASSETTE.ISWRITE
00 EC44 SIOCASSETTE.ISREAD
00 EC4A SIOCASSETTEWRITEFRAME
00 EC5B SIOCASSETTEREADFRAME
00 EC7F SIOCASSETTEREADFRAME.WAITZEROSTART
00 EC96 SIOCASSETTEREADFRAME.WAITONE
00 ECA3 SIOCASSETTEREADFRAME.WAITZERO
00 ECAF SIOCASSETTEREADFRAME.TIMEOUT
00 ECB4 SIOCASSETTEREADFRAME.WAITDONE
00 ECEE SIOCASSETTEREADFRAME.ADD_FRAME_LOOP
00 ECF8 SIOCASSETTEREADFRAME.NO_FRAMES
00 ED35 SIOCASSETTEREADFRAME.AALOOP
00 ED49 SIOCASSETTEREADFRAME.READTIMER
00 ED57 SIOCASSETTEREADFRAME.CORRECT_TIME
00 ED5F SIOCASSETTEREADFRAME.TIME_OK
00 ED60 DISKINIT
00 ED61 DISKHANDLER
00 ED94 DISKHANDLER.XIT
00 ED95 DISKHANDLER.NOTSTATUS
00 EDAD DISKHANDLER.DO_READ
00 EDAF DISKHANDLER.DO_IO
00 EDBC DISKHANDLER.DO_WRITE
00 EDC0 PRINTERINIT
00 EDC6 PRINTEROPEN
00 EDD8 PRINTEROPEN.XIT
00 EDDB PRINTERCLOSE
00 EDE2 PRINTERPUTBYTE
00 EDDB _PRINTERPUTBYTE
00 EDDB _PRINTERPUTBYTE.CLOSE_ENTRY
00 EDE2 _PRINTERPUTBYTE.PUT_ENTRY
00 EDF7 _PRINTERPUTBYTE.DO_EOL
00 EDF9 _PRINTERPUTBYTE.FILL_LOOP
00 EE04 _PRINTERPUTBYTE.FILL_DONE
00 EE1D _PRINTERPUTBYTE.DO_IO
00 EE26 _PRINTERPUTBYTE.IOCBDAT
00 EE30 PRINTERGETSTATUS
00 EE46 PRINTERGETSTATUS.ERROR
00 EE47 PRINTERGETSTATUS.IOCBDAT
00 E4CB PRINTERGETBYTE
00 E4CB PRINTERSPECIAL
00 EE51 CASSETTEINIT
00 EE6F CASSETTEOPENREAD
00 EE5C CASSETTEOPEN
00 EE6F CASSETTEOPEN.DO_OPEN_READ
00 EE6F CASSETTEOPEN.FOUND_READ_MODE
00 EE71 CASSETTEOPEN.FOUND_WRITE_MODE
00 EE88 CASSETTEOPEN.ONE_PING_ONLY
00 EE9D CASSETTEOPEN.NO_WRITE_INIT
00 EEB0 CASSETTEOPEN.ABORTED
00 EEB1 CASSETTECLOSE
00 EEBD CASSETTECLOSE.NOPARTIAL
00 EEC0 CASSETTECLOSE.NOTWRITE
00 EED2 CASSETTEGETBYTE
00 EED6 CASSETTEGETBYTE.FETCHBYTE
00 EEE5 CASSETTEGETBYTE.NOBYTES
00 EEF3 CASSETTEGETBYTE.XIT_EOF
00 EEF5 CASSETTEGETBYTE.ERROR
00 EEF6 CASSETTEGETBYTE.NOTEOFBYTE
00 EF00 CASSETTEGETBYTE.INIT_NEW_BLOCK
00 EF06 CASSETTEGETBYTE.NOT_FULL_BLOCK
00 EF0F CASSETTEGETBYTE.NOT_PARTIAL_BLOCK
00 EF12 CASSETTEPUTBYTE
00 EF22 CASSETTEFLUSH
00 EF32 CASSETTEFLUSH.NOT_EMPTY
00 EF3E CASSETTEFLUSH.IS_COMPLETE
00 EF3E CASSETTEFLUSH.IS_EMPTY
00 E4C9 CASSETTEGETSTATUS
00 E4CB CASSETTESPECIAL
00 EF56 CASSETTEDOIO
00 EF52 CASSETTEREADBLOCK
00 EF52 _CASSETTEDOIO
00 EF52 _CASSETTEDOIO.READ_BLOCK
00 EF56 _CASSETTEDOIO.DO_IO
00 EF95 _CASSETTEDOIO.NO_PWT
00 EF9A _CASSETTEDOIO.ROLLING_STOP
00 EFA3 CASSETTEWAIT
00 EF9D CASSETTEWAITLONGSHORTCHECK
00 EFA3 CASSETTEWAITLONGSHORTCHECK.NORMAL_ENTRY
00 EFBB CASSETTEWAITLONGSHORTCHECK.WAIT_TABLE_LO
00 EFC2 CASSETTEWAITLONGSHORTCHECK.WAIT_TABLE_HI
00 EFC9 CASSETTEBELL
00 EFCC CASSETTEBELL.SOUNDLOOP
00 EFCF CASSETTEBELL.DELAY
00 EFE6 INITHANDLERTABLE
00 EFF5 _INITRESET
00 EFF5 _INITRESET.RUN_DIAG
00 EFF8 INITRESET
00 EFFD INITCOLDSTART
00 EFFD _INITRESET.COLD_BOOT
00 F021 _INITRESET.NOT_DIAG
00 F031 _INITRESET.CLEARLOOP
00 F049 INITWARMSTART
00 F064 INITWARMSTART.DBCLEAR
00 F070 INITHARDWARERESET
00 F073 INITHARDWARERESET.HWCLEAR
00 F09C INITMEMORY
00 F0A2 INITMEMORY.PAGELOOP
00 F0B7 INITMEMORY.NOTRAM
00 F0BA INITVECTORTABLE1
00 F0D2 INITVECTORTABLE1.END
00 F0D2 INITVECTORTABLE2
00 F0D8 KRPDEL_TABLE
00 F0DA INITENVIRONMENT
00 F168 INITENVIRONMENT.SKIPCARTBINIT
00 F189 INITENVIRONMENT.SKIPCARTAINIT
00 F1A7 INITENVIRONMENT.WAITVBL
00 F1BA INITENVIRONMENT.REINITCAS
00 F1C3 INITENVIRONMENT.POSTCASBOOT
00 F1D1 INITENVIRONMENT.HAVE_CART_B
00 F1D8 INITENVIRONMENT.HAVE_CART_A
00 F1DB INITENVIRONMENT.NO_CART_A
00 F1DE INITENVIRONMENT.BOOT_DISK
00 F1E4 INITENVIRONMENT.REINITDISK
00 F1EC INITENVIRONMENT.POST_DISK_BOOT
00 F1EC INITENVIRONMENT.SKIP_DISK_BOOT
00 F1FF INITENVIRONMENT.NOBOOTCARTA
00 F20B INITENVIRONMENT.NOBOOTCARTB
00 F20E INITENVIRONMENT.INITCARTA
00 F211 INITENVIRONMENT.INITCARTB
00 F214 INITENVIRONMENT.SCREENEDITORNAME
00 F215 INITDISKBOOT
00 F218 INITCASSETTEBOOT
00 F21C BOOTDISK
00 F249 BOOTDISK.SECTOR1_OK
00 F24E BOOTDISK.SECTORLOOP
00 F263 BOOTDISK.FAIL
00 F267 BOOTDISK.XIT
00 F268 BOOTDISK.FAILMSG
00 F26E BOOTDISK.LOADDONE
00 F27B BOOTCASSETTE
00 F28C BOOTCASSETTE.BLOCK_LOOP
00 F2AB BOOTCASSETTE.LOAD_FAILURE
00 F2B6 BOOTINITHEADERS
00 F2D3 BOOTRUNLOADER
00 F2E3 BOOTCOPYBLOCK
00 F2F8 BOOTSHOWERROR
00 F2FA BOOTSHOWERROR.MSGLOOP
00 F308 BOOTSHOWERROR.ERRORMSG
00 F9C7 SCREENHEIGHTSSPLIT
00 F9C8 SCREENPIXELWIDTHSLO
00 F3F6 SCREENOPEN
00 F3F2 SCREENOPENMODE0
00 F3EE SCREENOPENGR0
00 F3F2 SCREENOPENGR0.USE_MODE0
00 F3F6 SCREENOPENGR0.USE_IOCB
00 F405 SCREENOPENGR0.CLEAR_PARMS
00 F42E SCREENOPENGR0.KILL_SPLIT
00 F430 SCREENOPENGR0.NOT_GTIA_MODE_OR_GR0
00 F44C SCREENOPENGR0.ALLOC_FAIL
00 F452 SCREENOPENGR0.CANT_REOPEN_GR0
00 F455 SCREENOPENGR0.PF_ALLOC_OK
00 F468 SCREENOPENGR0.NO_DLIST_PAGE_CROSSING
00 F496 SCREENOPENGR0.ALLOC_OK
00 F4D4 SCREENOPENGR0.NOT_GR11
00 F4F2 SCREENOPENGR0.NOSPLIT
00 F52C SCREENOPENGR0.NO_CURSOR
00 F532 SCREENOPENGR0.SETUP_DISPLAY
00 F56D SCREENOPENGR0.NO_LMS_SPLIT
00 F56D SCREENOPENGR0.WRITE_REPEAT
00 F573 SCREENOPENGR0.NO_CLEAR
00 F574 SCREENOPENGR0.WRITE_WITH_ZP_ADDRESS
00 F582 SCREENOPENGR0.TRY_CLEAR
00 F589 SCREENOPENGR0.STANDARD_COLORS
00 F58D SCREENBITPOSFLIPTAB
00 F591 SCREENINIT
00 F59F SCREENGETBYTE
00 F5D9 SCREENGETBYTE.MODE0
00 F5DE SCREENGETBYTE.XIT
00 F5DF SCREENPUTBYTE
00 F5F3 SCREENPUTBYTE.ERROR
00 F5F4 SCREENPUTBYTE.GRAPHICS_EOL
00 F5F7 SCREENPUTBYTE.NOT_CLEAR
00 F5FC SCREENPUTBYTE.NOT_CLEAR_2
00 F624 SCREENPUTBYTE.MODE_0
00 F63D SCREENPUTBYTE.NOYWRAP
00 F640 SCREENPUTBYTE.NOT_EOL
00 F675 SCREENPUTBYTE.NO_SCROLL
00 F682 SCREENPUTBYTE.RECOMPUTE_SHOW_CURSOR_EXIT
00 F682 SCREENPUTBYTE.POST_SCROLL
00 F685 SCREENPUTBYTE.NOWRAP
00 F688 SCREENPUTBYTE.CHECK_EXTEND
00 E4C9 SCREENGETSTATUS
00 F69B SCREENFOLDCOLOR
00 F6B8 SCREENFOLDCOLOR.FOLD_BYTE
00 F6B8 SCREENCONVERTATASCIITOINTERNAL
00 F6C3 SCREENSPECIAL
00 F6CE SCREENDRAWLINEFILL
00 F6FF SCREENDRAWLINEFILL.GOING_DOWN
00 F724 SCREENDRAWLINEFILL.GOING_RIGHT
00 F755 SCREENDRAWLINEFILL.DX_LARGER
00 F75F SCREENDRAWLINEFILL.NOT_EMPTY
00 F762 SCREENDRAWLINEFILL.DONE
00 F76C SCREENDRAWLINEFILL.SKIP_SHOWCURSOR
00 F76F SCREENDRAWLINEFILL.FILL_DONE
00 F774 SCREENDRAWLINEFILL.DO_FILL
00 F77A SCREENDRAWLINEFILL.SHIFT_LO_TAB
00 F77E SCREENDRAWLINEFILL.LEFT_SHIFT_4
00 F780 SCREENDRAWLINEFILL.LEFT_SHIFT_2
00 F781 SCREENDRAWLINEFILL.LEFT_SHIFT_1
00 F784 SCREENDRAWLINEFILL.LEFT_SHIFT_8
00 F789 SCREENDRAWLINEFILL.LEFT_SHIFT_OK
00 F78B SCREENDRAWLINEFILL.FILL_RIGHT_4
00 F78D SCREENDRAWLINEFILL.FILL_RIGHT_2
00 F78E SCREENDRAWLINEFILL.FILL_RIGHT_1
00 F791 SCREENDRAWLINEFILL.FILL_RIGHT_8
00 F79A SCREENDRAWLINEFILL.FILL_RIGHT_OK
00 F79E SCREENDRAWLINEFILL.FILL_LOOP
00 F7AD SCREENDRAWLINEFILL.FILL_START
00 F7B2 SCREENDRAWLINEFILL.RIGHT_SHIFT_4
00 F7B4 SCREENDRAWLINEFILL.RIGHT_SHIFT_2
00 F7B5 SCREENDRAWLINEFILL.RIGHT_SHIFT_1
00 F7B8 SCREENDRAWLINEFILL.RIGHT_SHIFT_8
00 F7BC SCREENDRAWLINEFILL.RIGHT_SHIFT_OK
00 F7BC SCREENDRAWLINEFILL.POST_XINC
00 F7BE SCREENDRAWLINEFILL.NO_XINC
00 F7CF SCREENDRAWLINEFILL.NEXT_PIXEL
00 F7D7 SCREENDRAWLINEFILL.NEXT_PIXEL_2
00 F7D9 SCREENDRAWLINEFILL.PIXEL_LOOP
00 F7EB SCREENDRAWLINEFILL.DO_YINC
00 F7ED SCREENDRAWLINEFILL.YINC_LOOP
00 F7FE SCREENDRAWLINEFILL.NO_YINC
00 F817 SCREENCLEAR
00 F825 SCREENCLEAR.IS_TEXT_WINDOW
00 F82F SCREENCLEAR.IS_GR0
00 F83F SCREENCLEAR.LOOP
00 F855 SCREENCLEAR.IS_GRAPHIC_SCREEN
00 F85B SCREENINSERTLINE
00 F85A SCREENINSERTPHYSLINE
00 F85B SCREENINSERTPHYSLINE.USE_C
00 F86B SCREENINSERTPHYSLINE.LINE_LOOP
00 F86D SCREENINSERTPHYSLINE.CHAR_LOOP
00 F874 SCREENINSERTPHYSLINE.LINE_LOOP_START
00 F88A SCREENINSERTPHYSLINE.NO_COPY
00 F88E SCREENINSERTPHYSLINE.CLEAR_LOOP
00 F8BE SCREENHIDECURSOR
00 F8C6 SCREENHIDECURSOR.NO_CURSOR
00 F8C7 SCREENCHECKPOSITION
00 F8D4 SCREENCHECKPOSITION.ROWCHECK_GR0
00 F8DC SCREENCHECKPOSITION.RMARGN_OK
00 F8E1 SCREENCHECKPOSITION.INVALID_POSITION
00 F8EF SCREENCHECKPOSITION.ROWCHECK_PASS
00 F908 SCREENCHECKPOSITION.NO_BREAK
00 F90A EDITORSWAPTOTEXT
00 F90F SCREENSWAP
00 F918 EDITORSWAPTOTEXT.SWAP_LOOP
00 F92A EDITORSWAPTOTEXT.ALREADY_THERE
00 F92C SCREENCOMPUTEADDR
00 F944 SCREENCOMPUTETOADDR
00 F942 SCREENCOMPUTETOADDRX0
00 F944 SCREENCOMPUTETOADDRX0.WITH_X
00 F94C SCREENCOMPUTERANGESIZE
00 F96C SCREENCOMPUTERANGESIZE.SHIFT_LOOP
00 F978 SCREENALIGNPIXEL
00 F973 SCREENSETUPPLOTPIXEL
00 F978 SCREENSETUPPLOTPIXEL.RSHIFT_MASK
00 F97B SCREENSETUPPLOTPIXEL.XMASKSHIFT_LOOP
00 F97F SCREENSETUPPLOTPIXEL.XMASKSHIFT_DONE
00 F982 SCREENSETUPPIXELADDR
00 F98B SCREENSETUPPIXELADDR.PHASE2
00 F997 SCREENSETUPPIXELADDR.XSHIFT_LOOP
00 F99D SCREENSETUPPIXELADDR.NO_XSHIFT
00 F9A3 SCREENADVANCEPOSNONMODE0
00 F9BC SCREENADVANCEPOSNONMODE0.GRAPHICS_EOL
00 F9C4 SCREENADVANCEPOSNONMODE0.GRAPHICS_NO_WRAP
00 F9C7 SCREENWIDTHS
00 F9CD SCREENPIXELWIDTHSHI
00 F9D2 SCREENENCODINGTAB
00 F9E2 SCREENPIXELMASKS
00 F9EA EDITOROPEN
00 E4C9 EDITORCLOSE
00 F9F6 EDITORGETBYTE
00 FA00 EDITORGETBYTE.HAVE_LINE
00 FA10 EDITORGETBYTE.HAVE_CHAR
00 FA13 EDITORGETBYTE.DONE
00 FA16 EDITORGETLINE
00 006D EDITORGETLINE._START_X
00 006C EDITORGETLINE._START_Y
00 FA29 EDITORGETLINE.READ_LOOP
00 FA2E EDITORGETLINE.READ_ERROR
00 FA2F EDITORGETLINE.READ_OK
00 FA4E EDITORGETLINE.DO_EOL
00 FA50 EDITORGETLINE.IS_EOL
00 FA68 EDITORGETLINE.CHAR_LOOP
00 FA72 EDITORGETLINE.BLANK
00 FA8D EDITORGETLINE.SCAN_SCROLL
00 FA90 EDITORGETLINE.SCAN_DONE
00 FAA8 EDITORPUTBYTE
00 FAB8 EDITORPUTBYTE.SCREENOK
00 FAD2 EDITORPUTBYTE.SPECIAL_FOUND
00 FAE2 EDITORPUTBYTE.NOT_SPECIAL
00 FAE8 EDITORPUTBYTE.XIT2
00 FAEB EDITORPUTBYTE.SPECIAL_CODE_TAB
00 FAFA EDITORPUTBYTE.SPECIAL_CODE_TAB_END
00 FAFC EDITORPUTBYTE.SPECIAL_CODE_TAB_END_2
00 FAFC EDITORPUTBYTE.SPECIAL_DISPATCH_LO_TAB
00 FB0B EDITORPUTBYTE.SPECIAL_ESCAPE
00 FB11 EDITORPUTBYTE.SPECIAL_CLEAR
00 FB14 EDITORPUTBYTE.SPECIAL_UP
00 FB1B EDITORPUTBYTE.ISUP2
00 FB1E EDITORPUTBYTE.SPECIAL_DOWN
00 FB28 EDITORPUTBYTE.VMOVEEXIT
00 FB38 EDITORPUTBYTE.MOVEEXIT
00 FB39 EDITORPUTBYTE.SPECIAL_BACKSPACE
00 FB41 EDITORPUTBYTE.SBKS_RECOMP
00 FB49 EDITORPUTBYTE.SBKS_XIT
00 FB4A EDITORPUTBYTE.SBKS_WRAP
00 FB5A EDITORPUTBYTE.SPECIAL_BELL
00 FB5D EDITORPUTBYTE.SPECIAL_SET_TAB
00 FB65 EDITORPUTBYTE.SPECIAL_CLEAR_TAB
00 FB6D EDITORPUTBYTE.SPECIAL_COMMON_EXIT_TAB
00 FB71 EDITORPUTBYTE.SPECIAL_COMMON_TAB
00 FB78 EDITORPUTBYTE.SPECIAL_TAB
00 FB82 EDITORPUTBYTE.TAB_SCAN_LOOP
00 FB8F EDITORPUTBYTE.TAB_FOUND
00 FB91 EDITORPUTBYTE.TAB_ADJUST_ROW
00 FBAA EDITORPUTBYTE.TAB_ADJUST_SCROLL
00 FBAD EDITORPUTBYTE.TAB_ADJUST_LEFT
00 FBAD EDITORPUTBYTE.HMOVE_TO_LMARGN
00 FBAF EDITORPUTBYTE.HMOVE_TO_X
00 FBB1 EDITORPUTBYTE.TAB_ADJUST_DONE
00 FBB2 EDITORPUTBYTE.SPECIAL_LEFT
00 FBBB EDITORPUTBYTE.SLFT_TO_RIGHT
00 FBBF EDITORPUTBYTE.SPECIAL_RIGHT
00 FBC8 EDITORPUTBYTE.SPECIAL_DELETE_LINE
00 FBCE EDITORPUTBYTE.SPECIAL_INSERT_LINE
00 FBD5 EDITORPUTBYTE.SPECIAL_DELETE_CHAR
00 FBE1 EDITORPUTBYTE.SPECIAL_INSERT_CHAR
00 FBF6 EDITORPUTBYTE.INSERT_LINE_LOOP
00 FBFA EDITORPUTBYTE.INSERT_LINE_LOOP_ENTRY
00 FC02 EDITORPUTBYTE.INSERT_SHIFT_LOOP
00 FC21 EDITORPUTBYTE.INSERT_CROSSED_LLINE
00 FC3B EDITORPUTBYTE.INSERT_NO_SCROLL
00 FC4C EDITORPUTBYTE.INSERT_CANT_EXTEND
00 FC52 EDITORPUTBYTE.INSERT_DONE
00 FC53 EDITORPUTBYTE.DISPATCH
00 FC5B EDITORPUTBYTE.DELETE_LINE_LOOP
00 FC65 EDITORPUTBYTE.DELETE_SHIFT_LOOP
00 FC6C EDITORPUTBYTE.DELETE_SHIFT_LOOP_ENTRY
00 FC83 EDITORPUTBYTE.DELETE_STOP_SHIFTING
00 FC89 EDITORPUTBYTE.DELETE_BLANK_TEST_LOOP
00 FCA6 EDITORPUTBYTE.DELETE_NOT_BLANK
00 FCA7 EDITORISSPECIAL
00 FCA7 EDITORISSPECIAL.SPECIAL_BINSEARCH
00 FCAF EDITORISSPECIAL.SPECIAL_FOUND
00 FCB0 EDITORRECOMPUTECURSORADDR
00 FCBE EDITORDELETELINE
00 FCBC EDITORDELETELINE0
00 FCBE EDITORDELETELINE0.USE_LINE
00 FCC4 EDITORDELETELINE0.SCROLL_LOOP
00 FCCD EDITORDELETELINE0.LINE_LOOP
00 FCD9 EDITORDELETELINE0.LINE_LOOP_START
00 FCFF EDITORDELETELINE0.DO_MASK
00 FD1A EDITORDELETELINE0.UPDATE_TABLE
00 FD1D EDITORDELETELINE0.ADJUST_LINES
00 FD26 EDITORDELETELINE0.ADJUST_LINE
00 FD31 EDITORDELETELINE0.ADJUST_LINE_BELOW
00 FD33 EDITORDELETELINE0.ADJUST_LINE_ABOVE
00 E4C9 EDITORGETSTATUS
00 E4CB EDITORSPECIAL
00 E4CB EDITORINIT
00 FD34 EDITORGETCURLOGICALLINEINFO
00 FD36 EDITORGETLOGICALLINEINFO
00 FD34 _EDITORGETLOGICALLINEINFO
00 FD36 _EDITORGETLOGICALLINEINFO.USE_A
00 FD43 EDITORTESTLOGICALLINEBIT
00 FD4C EDITORPHYSTOLOGICALROW
00 FD4A EDITORGETCURLOGICALROW
00 FD4C EDITORGETCURLOGICALROW.USE_LINE
00 FD4E EDITORGETCURLOGICALROW.TEST_LOOP
00 FD59 EDITORGETCURLOGICALROW.FOUND
00 FD5C EDITORBELL
00 FD61 EDITORSWAPTOSCREEN_Y1
00 FD63 EDITORSWAPTOSCREEN
00 FD6C EDITORGETLOGICALCOLUMN
00 FD7B EDITORSETUPTABINDEX
00 FD8A EDITORNEXTLINEADDR
00 FD9C EDITORLINELENGTHTAB
00 FDA0 SCREENENCODINGOFFSETTABLE
00 FDA3 SCREENENCODINGTABLE
00 FDB9 SCREENRESETLOGICALLINEMAP
00 FDCC SCREENSETLASTPOSITION
00 FDCE SCREENSETLASTPOSITION.LOOP
00 FDD6 SCREENADVANCEPOSMODE0
00 FDE4 SCREENADVANCEPOSMODE0.POST_WRAP
00 FDE5 SCREENSHOWCURSORANDXITOK
00 FDF4 SCREENSHOWCURSORANDXITOK.CURSOR_INHIBITED
00 E4C9 SCREENCLOSE
00 FDF6 SCREENPLAYFIELDSIZESLO
00 FE06 SCREENPLAYFIELDSIZESHI
00 FE16 SCREENMODETABLE
00 FE26 SCREENHEIGHTSHIFTS
00 FE36 SCREENHEIGHTS
00 FE3B SCREENPIXELWIDTHIDS
00 FE4B KEYBOARDINIT
00 E4C9 KEYBOARDOPEN
00 E4C9 KEYBOARDCLOSE
00 FE60 _KEYBOARDGETBYTE
00 FE60 _KEYBOARDGETBYTE.TOGGLE_SHIFT
00 FE60 _KEYBOARDGETBYTE.SHIFT_CTRL_ON
00 FE60 _KEYBOARDGETBYTE.CAPS_OFF
00 FE63 _KEYBOARDGETBYTE.WRITE_SHFLOK
00 FE66 KEYBOARDGETBYTE
00 FE66 _KEYBOARDGETBYTE.WAITFORCHAR
00 FE68 _KEYBOARDGETBYTE.WAITFORCHAR2
00 FE97 _KEYBOARDGETBYTE.VALID_KEY
00 FEA8 _KEYBOARDGETBYTE.DOSHIFTLOCK
00 FEAA _KEYBOARDGETBYTE.NOTALPHA
00 FEB4 _KEYBOARDGETBYTE.SKIP_INVERSE
00 FEBA _KEYBOARDGETBYTE.ISINVERSE
00 FEC4 _KEYBOARDGETBYTE.ISBREAK
00 FEC9 _KEYBOARDGETBYTE.ISCTRL3
00 E4CB KEYBOARDPUTBYTE
00 E4C9 KEYBOARDGETSTATUS
00 E4CB KEYBOARDSPECIAL
00 FECC KEYBOARDIRQ
00 FEE1 KEYBOARDIRQ.DEBOUNCED
00 FEEF KEYBOARDIRQ.XIT2
00 FEF4 KEYBOARDIRQ.XIT
00 FEF6 KEYBOARDIRQ.IS_SUSPEND
00 FF00 KEYBOARDBREAKIRQ
00 FF0C KEYCODETOATASCIITABLE

10524
res/altirra/kernel.lst Normal file

File diff suppressed because it is too large Load Diff

BIN
res/altirra/kernel.rom Normal file

Binary file not shown.

1023
res/altirra/kernelxl.lab Normal file

File diff suppressed because it is too large Load Diff

12415
res/altirra/kernelxl.lst Normal file

File diff suppressed because it is too large Load Diff

BIN
res/altirra/kernelxl.rom Normal file

Binary file not shown.

123
res/altirra/superkernel.lab Normal file
View File

@ -0,0 +1,123 @@
mads 2.1.0
Label table:
00 C010 TRIG0
00 C011 TRIG1
00 C012 TRIG2
00 C012 COLPM0
00 C013 TRIG3
00 C013 COLPM1
00 C014 COLPM2
00 C015 COLPM3
00 C016 COLPF0
00 C017 COLPF1
00 C018 COLPF2
00 C019 COLPF3
00 C01A COLBK
00 C01B PRIOR
00 C01F CONSOL
00 E800 POT0
00 E800 AUDF1
00 E801 POT1
00 E801 AUDC1
00 E802 POT2
00 E802 AUDF2
00 E803 POT3
00 E803 AUDC2
00 E804 POT4
00 E804 AUDF3
00 E805 POT5
00 E805 AUDC3
00 E806 POT6
00 E806 AUDF4
00 E807 POT7
00 E807 AUDC4
00 E808 AUDCTL
00 E809 KBCODE
00 E80A SKRES
00 E80B POTGO
00 E80D SERIN
00 E80D SEROUT
00 E80E IRQEN
00 E80E IRQST
00 E80F SKCTL
00 D400 DMACTL
00 D401 CHACTL
00 D402 DLISTL
00 D403 DLISTH
00 D404 HSCROL
00 D405 VSCROL
00 D409 CHBASE
00 D40A WSYNC
00 D40E NMIEN
00 D40F NMIST
00 D40F NMIRES
00 0000 POKMSK
00 0001 RTCLOK
00 0003 CRITIC
00 0004 ATRACT
00 0005 SDLSTL
00 0006 SDLSTH
00 0007 SDMCTL
00 0008 PCOLR0
00 0009 PCOLR1
00 000A PCOLR2
00 000B PCOLR3
00 000C COLOR0
00 000D COLOR1
00 000E COLOR2
00 000F COLOR3
00 0010 COLOR4
00 0011 PADDL0
00 0012 PADDL1
00 0013 PADDL2
00 0014 PADDL3
00 0015 PADDL4
00 0016 PADDL5
00 0017 PADDL6
00 0018 PADDL7
00 0200 VIMIRQ
00 0202 VVBLKI
00 0204 VVBLKD
00 0206 VDSLST
00 0208 VKYBDI
00 020A VKYBDF
00 020C VTRIGR
00 020E VBRKOP
00 0210 VSERIN
00 0212 VSEROR
00 0214 VSEROC
00 0216 VTIMR1
00 0218 VTIMR2
00 021A VTIMR4
00 021E JVECK
00 FC00 IRQ
00 FC03 SYSIRQ
00 FC18 SYSIRQ.NOT_SERIN
00 FC29 SYSIRQ.NOT_TRIGR
00 FC3A SYSIRQ.NOT_KYBD
00 FC4D SYSIRQ.NOT_SEROR
00 FC64 SYSIRQ.NOT_SEROC
00 FC78 SYSIRQ.NOT_TIMR1
00 FC8B SYSIRQ.NOT_TIMR2
00 FC9E SYSIRQ.NOT_TIMR4
00 FCAB SYSIRQ.WTF
00 FCB2 XITVBL
00 FCB8 SYSVBL
00 FCC9 SYSVBL.RTNOCARRY
00 FCE6 SYSVBL.COLORLOOP
00 FCF1 SYSVBL.POTLOOP
00 FD02 SYSKBD
00 FD13 KEYTABLE
00 FD23 NMI
00 FD31 RESET
00 FD40 RESET.NOTDIAG
00 FD44 RESET.ZEROLOOP
00 FD59 RESET.VECLOOP
00 FD64 RESET.PFCOPYLOOP
00 FD6F RESET.NAMECOPYLOOP
00 FD93 RESET.DLCOPY
00 FDC2 RESET.DLIST
00 FDCD RESET.PLAYFIELD
00 FE95 IRQTABLE
00 FEA1 SYSDLI
00 FEAA SYSDLI.NOROLL

479
res/altirra/superkernel.lst Normal file
View File

@ -0,0 +1,479 @@
mads 2.1.0
Source: source/SuperKernel/main.xasm
1 ; Altirra - Atari 800/800XL/5200 emulator
2 ; 5200 OS ROM replacement
3 ; Copyright (C) 2008-2010 Avery Lee
4 ;
5 ; Copying and distribution of this file, with or without modification,
6 ; are permitted in any medium without royalty provided the copyright
7 ; notice and this notice are preserved. This file is offered as-is,
8 ; without any warranty.
9
10 opt h-o+f+
11
12 icl 'includes.xasm'
Source: source/SuperKernel/includes.xasm
1 ; Altirra - Atari 800/800XL/5200 emulator
2 ; 5200 OS ROM replacement
3 ; Copyright (C) 2008-2016 Avery Lee
4 ;
5 ; Copying and distribution of this file, with or without modification,
6 ; are permitted in any medium without royalty provided the copyright
7 ; notice and this notice are preserved. This file is offered as-is,
8 ; without any warranty.
9
10 = C010 trig0 equ $c010
11 = C011 trig1 equ $c011
12 = C012 trig2 equ $c012
13 = C012 colpm0 equ $c012
14 = C013 trig3 equ $c013
15 = C013 colpm1 equ $c013
16 = C014 colpm2 equ $c014
17 = C015 colpm3 equ $c015
18 = C016 colpf0 equ $c016
19 = C017 colpf1 equ $c017
20 = C018 colpf2 equ $c018
21 = C019 colpf3 equ $c019
22 = C01A colbk equ $c01a
23 = C01B prior equ $c01b
24 = C01F consol equ $c01f
25 = E800 pot0 equ $e800
26 = E800 audf1 equ $e800
27 = E801 pot1 equ $e801
28 = E801 audc1 equ $e801
29 = E802 pot2 equ $e802
30 = E802 audf2 equ $e802
31 = E803 pot3 equ $e803
32 = E803 audc2 equ $e803
33 = E804 pot4 equ $e804
34 = E804 audf3 equ $e804
35 = E805 pot5 equ $e805
36 = E805 audc3 equ $e805
37 = E806 pot6 equ $e806
38 = E806 audf4 equ $e806
39 = E807 pot7 equ $e807
40 = E807 audc4 equ $e807
41 = E808 audctl equ $e808
42 = E809 kbcode equ $e809
43 = E80A skres equ $e80a
44 = E80B potgo equ $e80b
45 = E80D serin equ $e80d
46 = E80D serout equ $e80d
47 = E80E irqen equ $e80e
48 = E80E irqst equ $e80e
49 = E80F skctl equ $e80f
50 = D400 dmactl equ $d400
51 = D401 chactl equ $d401
52 = D402 dlistl equ $d402
53 = D403 dlisth equ $d403
54 = D404 hscrol equ $d404
55 = D405 vscrol equ $d405
56 = D409 chbase equ $d409
57 = D40A wsync equ $d40a
58 = D40E nmien equ $d40e
59 = D40F nmist equ $d40f
60 = D40F nmires equ $d40f
61
62 = 0000 pokmsk equ $00
63 = 0001 rtclok equ $01
64 ; equ $02
65 = 0003 critic equ $03
66 = 0004 atract equ $04
67 = 0005 sdlstl equ $05
68 = 0006 sdlsth equ $06
69 = 0007 sdmctl equ $07
70 = 0008 pcolr0 equ $08
71 = 0009 pcolr1 equ $09
72 = 000A pcolr2 equ $0a
73 = 000B pcolr3 equ $0b
74 = 000C color0 equ $0c
75 = 000D color1 equ $0d
76 = 000E color2 equ $0e
77 = 000F color3 equ $0f
78 = 0010 color4 equ $10
79 = 0011 paddl0 equ $11
80 = 0012 paddl1 equ $12
81 = 0013 paddl2 equ $13
82 = 0014 paddl3 equ $14
83 = 0015 paddl4 equ $15
84 = 0016 paddl5 equ $16
85 = 0017 paddl6 equ $17
86 = 0018 paddl7 equ $18
87
88 = 0200 vimirq equ $0200 ;IRQ immediate vector
89 = 0202 vvblki equ $0202 ;VBI immediate vector
90 = 0204 vvblkd equ $0204 ;VBI deferred vector
91 = 0206 vdslst equ $0206 ;display list vector
92 = 0208 vkybdi equ $0208 ;keyboard immediate vector
93 = 020A vkybdf equ $020a ;keyboard deferred vector
94 = 020C vtrigr equ $020c ;soft-trigger vector (BREAK key)
95 = 020E vbrkop equ $020e ;BRK opcode vector
96 = 0210 vserin equ $0210 ;serial input ready vector
97 = 0212 vseror equ $0212 ;serial output ready vector
98 = 0214 vseroc equ $0214 ;serial output complete vector
99 = 0216 vtimr1 equ $0216 ;POKEY timer #1 vector
100 = 0218 vtimr2 equ $0218 ;POKEY timer #2 vector
101 = 021A vtimr4 equ $021a ;POKEY timer #4 vector
102
103 = 021E jveck equ $021e
13
14 org $f800
15 F800 00 00 00 00 00 00 + ins 'atarifont.bin',$0,$400
16
17 ;=========================================================================
18 FC00 .proc irq
19 FC00 6C 00 02 jmp (vimirq)
20 .endp
21
22 ;=========================================================================
23 ;Must be at $FC03 for Montezuma's Revenge to work.
24 FC03 org $fc03
25 FC03 .proc sysirq
26 FC03 48 pha
27
28 ;We test interrupts in this order:
29 ; 20 -> VSERIN
30 ; 80 -> VTRIGR
31 ; 40 -> VKYBDI
32 ; 10 -> VSEROR
33 ; 08 -> VSEROC
34 ; 01 -> VTIMR1
35 ; 02 -> VTIMR2
36 ; 04 -> VTIMR4
37 ; VBRKOP
38 ;
39 ;Note that there is a complication with VSEROC, since it is not
40 ;masked by POKEY. We must only dispatch it if it is enabled in
41 ;POKMSK.
42 FC04 A9 20 lda #$20
43 FC06 2C 0E E8 bit irqst
44 FC09 D0 0D bne not_serin
45 FC0B 45 00 eor pokmsk
46 FC0D 8D 0E E8 sta irqen
47 FC10 A5 00 lda pokmsk
48 FC12 8D 0E E8 sta irqen
49 FC15 6C 10 02 jmp (vserin)
50 FC18 not_serin:
51 FC18 30 0F bmi not_trigr
52 FC1A A9 80 lda #$80
53 FC1C 45 00 eor pokmsk
54 FC1E 8D 0E E8 sta irqen
55 FC21 A5 00 lda pokmsk
56 FC23 8D 0E E8 sta irqen
57 FC26 6C 0C 02 jmp (vtrigr)
58 FC29 not_trigr:
59 FC29 70 0F bvs not_kybd
60 FC2B A9 40 lda #$40
61 FC2D 45 00 eor pokmsk
62 FC2F 8D 0E E8 sta irqen
63 FC32 A5 00 lda pokmsk
64 FC34 8D 0E E8 sta irqen
65 FC37 6C 08 02 jmp (vkybdi)
66 FC3A not_kybd:
67 FC3A 6A ror
68 FC3B 2C 0E E8 bit irqen
69 FC3E F0 0D beq not_seror
70 FC40 45 00 eor pokmsk
71 FC42 8D 0E E8 sta irqen
72 FC45 A5 00 lda pokmsk
73 FC47 8D 0E E8 sta irqen
74 FC4A 6C 12 02 jmp (vseror)
75 FC4D not_seror:
76 FC4D 6A ror
77 FC4E 24 00 bit pokmsk
78 FC50 F0 12 beq not_seroc
79 FC52 2C 0E E8 bit irqen
80 FC55 D0 0D bne not_seroc
81 FC57 45 00 eor pokmsk
82 FC59 8D 0E E8 sta irqen
83 FC5C A5 00 lda pokmsk
84 FC5E 8D 0E E8 sta irqen
85 FC61 6C 14 02 jmp (vseroc)
86 FC64 not_seroc:
87 FC64 A9 01 lda #$01
88 FC66 2C 0E E8 bit irqst
89 FC69 D0 0D bne not_timr1
90 FC6B 45 00 eor pokmsk
91 FC6D 8D 0E E8 sta irqen
92 FC70 A5 00 lda pokmsk
93 FC72 8D 0E E8 sta irqen
94 FC75 6C 16 02 jmp (vtimr1)
95 FC78 not_timr1:
96 FC78 2A rol
97 FC79 2C 0E E8 bit irqst
98 FC7C D0 0D bne not_timr2
99 FC7E 45 00 eor pokmsk
100 FC80 8D 0E E8 sta irqen
101 FC83 A5 00 lda pokmsk
102 FC85 8D 0E E8 sta irqen
103 FC88 6C 18 02 jmp (vtimr2)
104 FC8B not_timr2:
105 FC8B 2A rol
106 FC8C 2C 0E E8 bit irqst
107 FC8F D0 0D bne not_timr4
108 FC91 45 00 eor pokmsk
109 FC93 8D 0E E8 sta irqen
110 FC96 A5 00 lda pokmsk
111 FC98 8D 0E E8 sta irqen
112 FC9B 6C 1A 02 jmp (vtimr4)
113 FC9E not_timr4:
114 FC9E 8A txa
115 FC9F 48 pha
116 FCA0 BA tsx
117 FCA1 BD 01 01 lda $0101,x
118 FCA4 29 10 and #$10
119 FCA6 D0 03 bne wtf
120 FCA8 6C 0E 02 jmp (vbrkop)
121 FCAB wtf:
122 FCAB 68 pla
123 FCAC AA tax
124 FCAD 68 pla
125 FCAE 40 rti
126 .endp
127
128 ;=========================================================================
129 ;Must be at $FCB2 for Congo Bongo to work (grrr... damn SEGA)
130 FCAF org $fcb2
131 FCB2 .proc xitvbl
132 FCB2 68 pla
133 FCB3 A8 tay
134 FCB4 68 pla
135 FCB5 AA tax
136 FCB6 68 pla
137 FCB7 40 rti
138 .endp
139
140 ;=========================================================================
141 ;Must be at $FCB8 for Montezuma's Revenge to work.
142 FCB8 org $fcb8
143 FCB8 .proc sysvbl
144 FCB8 48 pha
145 FCB9 8A txa
146 FCBA 48 pha
147 FCBB 98 tya
148 FCBC 48 pha
149
150 FCBD E6 02 inc rtclok+1
151 FCBF D0 08 bne rtnocarry
152 FCC1 E6 01 inc rtclok
153 FCC3 A5 04 lda atract
154 FCC5 30 02 bmi rtnocarry
155 FCC7 E6 04 inc atract
156 FCC9 rtnocarry:
157
158 FCC9 A5 03 lda critic
159 FCCB D0 E5 bne xitvbl
160
161 FCCD A5 05 8D 02 D4 mva sdlstl dlistl
162 FCD2 A5 06 8D 03 D4 mva sdlsth dlisth
163 FCD7 A5 07 8D 00 D4 mva sdmctl dmactl
164
165 ;copy and attract colors
166 FCDC A0 00 ldy #0
167 FCDE 24 04 bit atract
168 FCE0 10 02 A4 01 spl:ldy rtclok
169
170 FCE4 A2 08 ldx #8
171 FCE6 colorloop:
172 FCE6 98 tya
173 FCE7 55 08 eor pcolr0,x
174 FCE9 9D 12 C0 sta colpm0,x
175 FCEC CA dex
176 FCED 10 F7 bpl colorloop
177
178 ;update pots
179 FCEF A2 07 ldx #7
180 FCF1 potloop:
181 FCF1 BD 00 E8 lda pot0,x
182 FCF4 95 11 sta paddl0,x
183 FCF6 CA dex
184 FCF7 10 F8 bpl potloop
185 FCF9 8D 0B E8 sta potgo
186
187 ;run deferred
188 FCFC 6C 04 02 jmp (vvblkd)
189 .endp
190
191 ;=========================================================================
192 ; System keyboard handler
193 ;
194 ; MUST be at $FD02 for Blueprint to work.
195 ;
196 FCFF org $fd02
197 FD02 .proc syskbd
198 FD02 8A txa
199 FD03 48 pha
200 FD04 98 tya
201 FD05 48 pha
202 FD06 AD 09 E8 lda kbcode
203 FD09 4A lsr
204 FD0A 29 0F and #$0f
205 FD0C AA tax
206 FD0D BD 13 FD lda keytable,x
207 FD10 6C 0A 02 jmp (vkybdf)
208 .endp
209
210 ;=========================================================================
211 ;Keyboard translation table
212 ;
213 ;MUST be at $FD13 for Congo Bongo to work.
214 ;
215 FD13 org $fd13
216 FD13 keytable:
217 FD13 FF 0B 00 0A 0E 09 + dta $ff,$0b,$00,$0a,$0e,$09,$08,$07,$0d,$06,$05,$04,$0c,$03,$02,$01
218
219 ;=========================================================================
220 ; NMI handler
221 ;
222 FD23 .proc nmi
223 FD23 2C 0F D4 bit nmist
224
225 ;This is pretty useless, but the stock 5200 OS does it, and it
226 ;affects DLI timing -- in particular, it can cause DLIs ported
227 ;from the 400/800 OS to fail.
228 FD26 8D 0F D4 sta nmires
229
230 FD29 10 03 6C 06 02 spl:jmp (vdslst)
231 FD2E 6C 02 02 jmp (vvblki)
232 .endp
233
234 ;=========================================================================
235 ; RESET handler
236 ;
237 FD31 .proc reset
238 ;initialize CPU
239 FD31 78 sei
240 FD32 D8 cld
241 FD33 A2 FF ldx #$ff
242 FD35 9A txs
243
244 ;check for diagnostic cartridge
245 FD36 AD FD BF lda $bffd
246 FD39 C9 FF cmp #$ff
247 FD3B D0 03 bne notdiag
248 FD3D 6C FE BF jmp ($bffe)
249 FD40 notdiag:
250
251 ;zero hardware registers and page zero
252 FD40 A2 00 ldx #0
253 FD42 A9 00 lda #0
254 FD44 zeroloop:
255 FD44 95 00 sta $00,x
256 FD46 9D 00 C0 sta $c000,x
257 FD49 9D 00 D4 sta $d400,x
258 FD4C 9D 00 E8 sta $e800,x
259 FD4F E8 inx
260 FD50 D0 F2 bne zeroloop
261
262 ;init hardware display
263 FD52 A9 F8 8D 09 D4 mva #$f8 chbase
264
265 ;initialize vectors
266 FD57 A2 0B ldx #$0b
267 FD59 vecloop:
268 FD59 BD 95 FE lda irqtable,x
269 FD5C 9D 00 02 sta $0200,x
270 FD5F CA dex
271 FD60 10 F7 bpl vecloop
272
273 ;set up default display
274 FD62 A2 4F ldx #79
275 FD64 pfcopyloop:
276 FD64 BD CD FD lda playfield,x
277 FD67 9D 00 10 sta $1000,x
278 FD6A CA dex
279 FD6B 10 F7 bpl pfcopyloop
280
281 FD6D A2 13 ldx #19
282 FD6F namecopyloop:
283 FD6F BD E8 BF lda $bfe8,x
284 FD72 9D 50 10 sta $1050,x
285 FD75 CA dex
286 FD76 10 F7 bpl namecopyloop
287
288 ;PF0 is the flashing color, while PF1 is white. PF2 and PF3 are black.
289 ;In fact, PF3 must be black in order for the Defender title to appear
290 ;properly.
291 FD78 A9 10 85 0C mva #$10 color0
292 FD7C A9 0F 85 0D mva #$0F color1
293 FD80 A9 00 85 0E mva #$00 color2
294 FD84 A9 00 85 0F mva #$00 color3
295 FD88 A9 00 85 10 mva #$00 color4
296 FD8C A9 04 8D 1B C0 mva #$04 prior
297
298 ;move display list; must be at $2000 for Miniature Golf to work
299 FD91 A2 0A ldx #playfield-dlist-1
300 FD93 dlcopy:
301 FD93 BD C2 FD lda dlist,x
302 FD96 9D 00 20 sta $2000,x
303 FD99 CA dex
304 FD9A 10 F7 bpl dlcopy
305
306 FD9C A9 22 85 07 mva #$22 sdmctl
307 FDA0 A9 C0 8D 0E D4 mva #$c0 nmien
308 FDA5 A9 00 85 05 A9 20 + mwa #$2000 sdlstl
309
310 ;enable key input
311 FDAD A9 02 8D 0F E8 mva #$02 skctl
312 FDB2 A9 C0 lda #$c0
313 FDB4 85 00 sta pokmsk
314 FDB6 8D 0E E8 sta irqen
315
316 ;wait two seconds (four is too long)
317 FDB9 A9 78 lda #120
318 FDBB C5 02 D0 FC cmp:rne rtclok+1
319
320 ;invoke cartridge
321 FDBF 6C FE BF jmp ($bffe)
322
323 FDC2 dlist:
324 FDC2 70 dta $70
325 FDC3 70 dta $70
326 FDC4 70 dta $70
327 FDC5 42 00 10 dta $42,a($1000)
328 FDC8 82 dta $82
329 FDC9 07 dta $07
330 FDCA 41 C2 FD dta $41,a(dlist)
331
332 FDCD playfield:
333 ; 0123456789012345678901234567890123456789
334 FDCD 21 6C 74 69 72 72 + dta d"Altirra 5200 ROM Kernel "
335 FDF5 2E 6F 77 00 70 6C + dta d"Now playing: "
336 .endp
337
338 ;=========================================================================
339 ; Default IRQ table
340 ;
341 ; MUST be at $FE95 for Pitfall! to work.
342 ;
343 FE1D org $fe95
344 FE95 irqtable:
345 FE95 03 FC dta a(sysirq) ;vimirq = $fc03
346 FE97 B8 FC dta a(sysvbl) ;vvblki = $fcb8
347 FE99 B2 FC dta a(xitvbl) ;vvblkd
348 FE9B A1 FE dta a(sysdli) ;vdslst = $fea1
349 FE9D 02 FD dta a(syskbd) ;vkybdi
350 FE9F B2 FC dta a(xitvbl) ;vkybdf
351
352 ;=========================================================================
353 ;Must be at $FEA1 for A.E.
354 FEA1 org $fea1
355 FEA1 .proc sysdli
356 FEA1 48 pha
357
358 ;cycle color PF0, but avoid going through grayscales
359 FEA2 E6 0C inc color0
360 FEA4 D0 04 bne noroll
361 FEA6 A9 10 lda #$10
362 FEA8 85 0C sta color0
363 FEAA noroll:
364 FEAA 68 pla
365 FEAB 40 rti
366 .endp
367
368 ;=========================================================================
369
370 FEAC org $fffa
371 FFFA 23 FD dta a(nmi)
372 FFFC 31 FD dta a(reset)
373 FFFE 00 FC dta a(irq)

BIN
res/altirra/superkernel.rom Normal file

Binary file not shown.

View File

@ -255,6 +255,11 @@ export var POKEYDeviceChannel = function() {
}
}
}
this.getRegister = function(addr) {
addr &= 0xf;
return regs[addr];
}
this.setTIARegister = function(addr, value) {
switch (addr) {

View File

@ -1651,7 +1651,7 @@ export var _MOS6502 = function() {
pushToStack((PC >>> 8) & 0xff);
},
function() { pushToStack(PC & 0xff); },
function() { pushToStack(getStatusBits()); },
function() { pushToStack(getStatusBits() & ~0x10); }, // no BRK flag
function() { AD = bus.read(IRQ_VECTOR); },
function() { AD |= bus.read(IRQ_VECTOR + 1) << 8; },
function() { PC = AD; fetchNextOpcode(); }
@ -1667,7 +1667,7 @@ export var _MOS6502 = function() {
pushToStack((PC >>> 8) & 0xff);
},
function() { pushToStack(PC & 0xff); },
function() { pushToStack(getStatusBits()); },
function() { pushToStack(getStatusBits() & ~0x10); }, // no BRK flag
function() { AD = bus.read(NMI_VECTOR); },
function() { AD |= bus.read(NMI_VECTOR + 1) << 8; },
function() { PC = AD; fetchNextOpcode(); }

View File

@ -308,6 +308,7 @@ export abstract class BasicMachine extends BasicHeadlessMachine implements Sampl
abstract sampleRate : number;
overscan : boolean = false;
rotate : number = 0;
aspectRatio : number = 1.0;
pixels : Uint32Array;
audio : SampledAudioSink;
@ -321,7 +322,11 @@ export abstract class BasicMachine extends BasicHeadlessMachine implements Sampl
this.audio = audio;
}
getVideoParams() : VideoParams {
return {width:this.canvasWidth, height:this.numVisibleScanlines, overscan:this.overscan, rotate:this.rotate};
return {width:this.canvasWidth,
height:this.numVisibleScanlines,
aspect:this.aspectRatio,
overscan:this.overscan,
rotate:this.rotate};
}
connectVideo(pixels:Uint32Array) : void {
this.pixels = pixels;

View File

@ -368,6 +368,7 @@ export const Keys = {
GP_D: {c: 67, n: "C", plyr:0, button:3},
SELECT: {c: 220, n: "\\", plyr:0, button:8},
START: {c: 13, n: "Enter", plyr:0, button:9},
OPTION: {c: 9, n: "Tab", plyr:0, button:10},
// gamepad and keyboard (player 1)
P2_UP: {c: 87, n: "W", plyr:1, yaxis:-1},
P2_DOWN: {c: 83, n: "S", plyr:1, yaxis:1},

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
import { Platform, getOpcodeMetadata_6502, getToolForFilename_6502, Base6502MachinePlatform } from "../common/baseplatform";
import { PLATFORMS, Keys, makeKeycodeMap } from "../common/emu";
import { BaseMAME6502Platform } from "../common/mameplatform";
import { Atari8_WASMMachine } from "../machine/atari8";
import { Atari5200, Atari800, Atari8_WASMMachine } from "../machine/atari8";
declare var jt; // for 6502
@ -27,7 +27,7 @@ const ATARI8_KEYCODE_MAP = makeKeycodeMap([
]);
const Atari800_MemoryMap = { main:[
{name:'RAM',start:0x0,size:0x10000,type:'ram'},
{name:'RAM',start:0x0,size:0xc000,type:'ram'},
{name:'Left Cartridge ROM',start:0xa000,size:0x2000,type:'rom'},
{name:'GTIA',start:0xd000,size:0x20,type:'io'},
{name:'POKEY',start:0xd200,size:0x10,type:'io'},
@ -35,7 +35,7 @@ const Atari800_MemoryMap = { main:[
{name:'ANTIC',start:0xd400,size:0x10,type:'io'},
{name:'Cartridge Control Line',start:0xd600,size:0x100,type:'io'},
{name:'ROM',start:0xd800,size:0x800,type:'rom'},
{name:'ATARI Character Set',start:0xe000,size:0x400,type:'rom'},
{name:'Character Set',start:0xe000,size:0x400,type:'rom'},
{name:'ROM',start:0xe400,size:0x1c00,type:'rom'},
] }
@ -133,32 +133,6 @@ class Atari5200MAMEPlatform extends Atari8MAMEPlatform implements Platform {
] } };
}
///
// Altirra Superkernel ROM (http://www.virtualdub.org/altirra.html) compiled with MADS
const ALTIRRA_SUPERKERNEL_LZG = `
TFpHAAAIAAAABJGU01hQARcZHSUAACUFGCUBABgAAGZmZh2IZv9mJUEAGD5gPAZ8HVBsGDBmRgAcNhw4
b2Y7HagdoA4cGBgcDgAAcDgYGDhwHSA8/zwdehgYfhkFGh1EMCWhfhkGYx0IAAAGDBgwYEAAADxmbnZm
PB0MHTgYHRs8Zh0RJeF+DBgMHVAMHDxsfgwdCGB8Bh1IPGB8ZiXifh15MB1oPB2IPGY+Bgw4GQRVGQNx
JeMwHV4YDAYZBHclQWAdBhgwYBkEYBkC6Dxmbm5gPh0nHT9+ZgAAfGZ8ZmZ8HVBgYBkCUHhsZmZseBkD
eGBgHXwl4h04PmBgbmYdMB1uGSIrfhkiOR0YBiUBHXAdLR0zAAAdJR2wY3d/a2NjHRB2fn5uHRA8HS4d
YBkCZhkCSB1IbDYdyB1wPGA8BgYdGBkDUBkkkGZmfiXkPB0IY2Nrf3cZAkhmPB0zJeMdoH4ZAtcdIB4d
bx4AAEAZAuoGAAB4HUh4AAAIHDYdLiUF/wAANn9/PhwIGSLHHx8lgQMlBR0D+PgZRA/4+Bkk5CXjAwcO
HDhw4MDA4HA4HA4HAwEDBw8fP3//HRgADyUBgMDg8Pj8/v8dRB1M8CUBJeL/HZolBh3GHZQcHHd3CBwd
RxkDeBkGFR0D//8diDx+fn48GQUu///AJQUdhxkjEx0gGQVEJQIZA8AdCHhgeGB+GQL4GDwZIjoZA0l+
GSIwGDB+MBlDFwx+DCXjPH4dkAA8Bj4ZIshgGUJYfB1IYGBgPBkiyD5mHVAAPGZ+HUgOGD4ZBJ8dTwZ8
HehmAAAYADgYGB1oGSP6PB0QbBkj+B0OHZAAZn9/axkich1nHRAZI+kdUBkm+RkDSAYdSBlDWAAZY3EA
ABliPxgOHXglARkCgBkl+ABja38+Nh1IPBgZY2kdVwwZQqEZZDgZAtAYPBljzyUCAH54fG5mBgAIGDh4
OBgIABAYHB4cGBAAbAACSKkgLA7o0A1FAI0O6KUlgmwQAjAPqYAZCQkMAnAPqUAZCQkIAmodLfAZCi0S
AmokAPASGQ5EFAKpARkODBYCKhkOCxgZEAsaAopIur0BASkQ0ANsDgJoqmhA////aKgdQUiKSJhI5gLQ
COYBpQQwAuYEpQPQ5aUFjQLUpQaNA9SlB40A1KAAJAQQAqQBogiYVQidEsDKEPeiB70A6JURyhD4jQvo
bAQC////GQJBrQnoSikPqr0T/WwKAv8LAAoOCQgHDQYFBAwDAgEsD9SND9QQA2wGAmwCAnjYov+arf2/
yf/QA2z+v6IAqQCVAJ0AwJ0A1J0A6OjQ8qn4jQnUogu9lf6dAAIZAmtPvc39nQAQHUMTvei/nVAdQ6kQ
hQypD4UNqQCFDiVhDyVhEKkEjRvAogq9wh0nIB1cIoUHqcCNDtQdFQWpIIUGqQKND+ipwIUZIhapeMUC
0Pxs/r9wcHBCABCCB0HC/SFsdGlycmEAFRIQEAAyLy0AK2VybmVsGWpyJQMub3cAcGxheWluZxoZDxUZ
a58lHiUcJQkD/Lj8svyh/gL9svxI5gzQBBkiJhkj9SUfJR8lHiUBI/0x/QD8`;
/// WASM Atari8 platform
class Atari8WASMPlatform extends Base6502MachinePlatform<Atari8_WASMMachine> implements Platform {
@ -178,12 +152,50 @@ class Atari8WASMPlatform extends Base6502MachinePlatform<Atari8_WASMMachine> imp
}
}
class Atari800WASMPlatform extends Atari8WASMPlatform {
class Atari800WASMPlatform extends Atari8WASMPlatform {
}
////
class Atari800Platform extends Base6502MachinePlatform<Atari800> {
newMachine() { return new Atari800(); }
getPresets() { return Atari800_PRESETS; }
getDefaultExtension() { return ".c"; };
getToolForFilename = getToolForFilename_Atari8;
readAddress(a) { return this.machine.readConst(a); }
getMemoryMap() { return Atari800_MemoryMap; }
showHelp() {
// TODO
}
getROMExtension(rom:Uint8Array) {
// TODO
if (rom && rom[0] == 0x01 && rom[1] == 0x08) return ".prg";
else return ".bin";
}
async start() {
let bios = await this.loadKernel();
await super.start();
this.machine.loadBIOS(bios);
}
biosPath = 'res/altirra/kernel.rom';
async loadKernel() {
var biosResponse = await fetch(this.biosPath);
if (biosResponse.status == 200 || (biosResponse as any as Blob).size) {
var biosBinary = await biosResponse.arrayBuffer();
return new Uint8Array(biosBinary);
} else throw new Error('could not load BIOS file');
}
}
class Atari5200Platform extends Atari800Platform {
newMachine() { return new Atari5200(); }
biosPath = 'res/altirra/superkernel.rom';
}
///
PLATFORMS['atari8-800xl.mame'] = Atari800MAMEPlatform
PLATFORMS['atari8-800.xlmame'] = Atari800MAMEPlatform
PLATFORMS['atari8-5200.mame'] = Atari5200MAMEPlatform
PLATFORMS['atari8-800xl'] = Atari800WASMPlatform
PLATFORMS['atari8-800.xlwasm'] = Atari800WASMPlatform
PLATFORMS['atari8-800'] = Atari800Platform
PLATFORMS['atari8-5200'] = Atari5200Platform

View File

@ -271,6 +271,13 @@ var PLATFORM_PARAMS = {
libargs: ['atari.lib', '-D', '__CARTFLAGS__=4'],
fastbasic_cfgfile: 'fastbasic-cart.cfg',
},
'atari8-800': {
arch: '6502',
define: ['__ATARI__'],
cfgfile: 'atari-cart.cfg',
libargs: ['atari.lib', '-D', '__CARTFLAGS__=4'],
fastbasic_cfgfile: 'fastbasic-cart.cfg',
},
'atari8-5200': {
arch: '6502',
define: ['__ATARI5200__'],

View File

@ -40,7 +40,6 @@ var _sms = require('gen/platform/sms.js');
var _c64 = require('gen/platform/c64.js');
var _vectrex = require('gen/platform/vectrex.js');
var _zx = require('gen/platform/zx.js');
var _atari8 = require('gen/platform/atari8.js');
var util = require('gen/common/util.js');
util.loadScript = function(s) { console.log('tried to load',s); } // for vcs
@ -360,13 +359,11 @@ describe('Platform Replay', () => {
}
});
});
/*
it('Should run atari 800xl', async () => {
await testPlatform('atari8-800xl', 'siegegame.bin', 92, (platform, frameno) => {
it('Should run atari800', async () => {
await testPlatform('atari8-800', 'siegegame.bin', 92, (platform, frameno) => {
if (frameno == 62) {
keycallback(Keys.VK_DOWN.c, Keys.VK_DOWN.c, 1);
}
});
});
*/
});