mirror of
https://github.com/Michaelangel007/apple2_castle_wolfenstein_map_viewer.git
synced 2025-02-07 19:30:32 +00:00
540 lines
13 KiB
PHP
540 lines
13 KiB
PHP
// AppleWin Debugger Script
|
|
// by Michaelangel007
|
|
// for Castle Wolfenstein
|
|
|
|
// Hide all zero page variables
|
|
SYMMAIN OFF
|
|
SYMBASIC OFF
|
|
|
|
SYMASM CLEAR // data
|
|
SYMUSER CLEAR // symbols
|
|
|
|
// 6502 Stack
|
|
SYM FuncRet = 103 // Get return low address from hardware stack
|
|
|
|
// ROM Vectors
|
|
DA vRESET 3F2
|
|
DB xRESET 3F4 // [ $3F3 ] ^ #$A5
|
|
DA xIRQ 3FE
|
|
|
|
// IO usage
|
|
SYM IO.KEYBOARD = C000
|
|
SYM IO.KEYSTROBE = C010
|
|
|
|
// Video modes
|
|
SYM IO.GRAPHICS = C050 // TXTCLR
|
|
SYM IO.TEXT = C051 // TXTSET
|
|
SYM IO.FULL = C052 // MIXCLR
|
|
SYM IO.MIXED = C053 // MIXSET
|
|
SYM IO.PAGE1 = C054 // LOWSCR
|
|
SYM IO.PAGE2 = C055 // HISCR
|
|
SYM IO.LORES = C056 // LORES
|
|
SYM IO.HIRES = C057 // HIRES
|
|
|
|
// Joystick
|
|
SYM IO.STROBE = C040 // Game I/O Strobe Output
|
|
|
|
SYM IO.BUTTON1 = C061 // Open Apple
|
|
SYM IO.BUTTON2 = C062 // Closed Apple
|
|
SYM IO.BUTTON3 = C063
|
|
SYM IO.JOY1X = C064
|
|
SYM IO.JOY1Y = C065
|
|
SYM IO.JOY2X = C066
|
|
SYM IO.JOY2Y = C067
|
|
SYM IO.JOYREAD = C070 // LDA then read JOY1X..JOY2Y
|
|
|
|
// ROM usage
|
|
SYM BASIC.COLD = E000
|
|
SYM ROM.BACK = FD6F // Unnamed ROM Entry point, BCKSPC-2
|
|
SYM ROM.COUT = FDED
|
|
SYM ROM.COUT2 = FDF0
|
|
SYM ROM.CR = FD8E
|
|
SYM ROM.HOME = FC58
|
|
SYM ROM.KEYIN = FD1B
|
|
SYM ROM.PREAD = FB1E
|
|
SYM ROM.RDKEY2 = FD0C
|
|
SYM ROM.TEXT = FB39
|
|
SYM ROM.VTAB = FC22
|
|
SYM ROM.WAIT = FCA8
|
|
|
|
echo "=== Castle Wolfenstein ==="
|
|
// Disk "Castle Wolfenstein (4am crack).dsk"
|
|
// BLOAD "@INIT"
|
|
// Start $0880 // AA72:80 08
|
|
// Length $12BE // AA60:BE 12
|
|
// End $1B3D
|
|
|
|
// Prefix for names
|
|
// z Zero Page variables
|
|
// g Global variables (not on page zero)
|
|
// _ Function (not named yet)
|
|
// B Bytes (not named yet)
|
|
// T Text string
|
|
|
|
// Vars Zero-Page
|
|
DB zRTSLo 10
|
|
DB zRTSHi 11
|
|
|
|
DB ROM.zWinL 20 // Left $00
|
|
DB ROM.zWinW 21 // Width $28 = 40
|
|
DB ROM.zWinT 22 // Top $00
|
|
DB ROM.zWinB 23 // Bottom $18 = 24
|
|
DB ROM.zHTAB 24 // CH Cursor X
|
|
DB ROM.zVTAB 25 // CV Cursor Y
|
|
|
|
DA ROM.Input 36 // CSWL
|
|
DA ROM.Output 38 // KSWL
|
|
|
|
// ROM.z
|
|
DW zRND 4A // @1615; Also search for LDA $C000
|
|
|
|
DB GlyphOldX 60
|
|
DB GlyphX 61
|
|
DB GlyphY 62
|
|
DA GlyphDst 63 // 16-bit pointer
|
|
|
|
DW pRoom 6B // @16B1 $40F0
|
|
|
|
DB z_76 76 // @08F2= 76:7F
|
|
DB z_D9 D9 // @08EC= D9:FF
|
|
|
|
// NOTE: CW uses interleaved CODE + DATA
|
|
// Const Data - Strings
|
|
ASC 88E:897 // "NOMON C,O",00
|
|
|
|
ASC 8A1:8A6 // "MON I",00
|
|
|
|
ASC 8F7:907 // "BLOAD PIX,A$2000",00
|
|
|
|
ASC 914:91F // "BLOAD ^CHARSET,A$8400"
|
|
ASC 920:929
|
|
|
|
ASC 935:93F // "PRESS RETURN TO BEGIN.",00
|
|
ASC 940:94B
|
|
|
|
ASC 989:98F
|
|
ASC 990:99F
|
|
ASC 9A0:9AF
|
|
ASC 9B0:9BF
|
|
ASC 9C0:9CF
|
|
ASC 9D0:9DF
|
|
ASC 9E0:9EF
|
|
ASC 9F0:9FA
|
|
|
|
ASC A08:A17
|
|
ASC A18:A27
|
|
ASC A28:A37
|
|
ASC A38:A47
|
|
ASC A48:A49
|
|
ASC ABE:AC8
|
|
|
|
ASC AD2:ADF // "BLOAD SEKTOR,A$4004",00
|
|
ASC AE0:AE5
|
|
|
|
ASC B0A:B0F // "BSAVE CASTLE,A$4004,L$3DFC",00
|
|
ASC B10:B1F
|
|
ASC B20:B24
|
|
|
|
ASC B34:B3F // "BSAVE BACKUP,A$4004,L$3DFC",00
|
|
ASC B40:B4E
|
|
|
|
ASC B5E:B69
|
|
ASC B70:B75
|
|
ASC B7C:B86
|
|
ASC B99:BA3
|
|
|
|
ASC BAD:BAF // "BLOAD BACKUP,A$4004",00
|
|
ASC BB0:BBF
|
|
ASC BC0:BC0
|
|
|
|
ASC BD3:BE2
|
|
ASC BE3:BED
|
|
ASC C0B:C1A
|
|
ASC C1B:C2A
|
|
ASC C36:C45
|
|
ASC C46:C4C
|
|
ASC C6C:C76
|
|
|
|
ASC CA1:CA4 // " ",00 ; SPC(3)
|
|
|
|
ASC CE1:CF0
|
|
ASC CF1:D00
|
|
ASC D01:D10
|
|
ASC D11:D20
|
|
ASC D21:D30
|
|
ASC D31:D40
|
|
ASC D41:D50
|
|
ASC D51:D60
|
|
ASC D61:D70
|
|
ASC D71:D80
|
|
ASC D81:D90
|
|
ASC D91:DA0
|
|
ASC DA1:DB0
|
|
ASC DB1:DC0
|
|
ASC DC1:DC7
|
|
ASC E36:E40
|
|
|
|
ASC E7A:E80 // "CASTLE",00 // XREF @ $0955
|
|
DW E81:E88
|
|
|
|
ASC E89:E90 // $10 PRIVATE
|
|
ASC E91:E99 // $20 CORPORAL
|
|
ASC E9A:EA2 // $30 SERGEANT
|
|
ASC EA3:EAD // $40 LIEUTENANT
|
|
ASC EAE:EB5 // $50 CAPTAIN
|
|
ASC EB6:EBD // $60 COLONEL
|
|
ASC EBE:EC5 // $70 GENERAL
|
|
ASC EC6:ED3 // $80 FIELD MARSHAL
|
|
ASC EF9:F08
|
|
ASC F09:F10
|
|
ASC F1A:F1F
|
|
ASC F20:F2F
|
|
ASC F30:F35
|
|
ASC F41:F4F
|
|
ASC F50:F5F
|
|
ASC F60:F6F
|
|
ASC F70:F77
|
|
ASC F83:F8F
|
|
ASC F90:F9F
|
|
|
|
ASC FA9:FAF // " HAND.",8D
|
|
ASC FB0:FBF // 8D,8D,8D,"PRESS THE SPA"
|
|
ASC FC0:FCF // "CE BAR TO KEEP",8D,8D
|
|
ASC FD0:FDF // "THE CONTROLS AS "
|
|
ASC FE0:FE9 // "THEY ARE.",00
|
|
|
|
ASC 1015:101F
|
|
ASC 1020:102F
|
|
ASC 1030:103F
|
|
ASC 1040:104E
|
|
ASC 1068:106F
|
|
ASC 1070:107C
|
|
ASC 109B:109F
|
|
ASC 10A0:10AF
|
|
ASC 10B0:10BF
|
|
ASC 10C0:10CF
|
|
ASC 10D0:10D4
|
|
|
|
ASC 10F2:10FF // "MOVE YOUR JOYSTICK",8D,8D
|
|
ASC 1100:110F // "TO THE UPPPER LEFT,",8D,8D
|
|
ASC 1110:111F // "HOLD IT THERE AND",8D,8D"
|
|
ASC 1120:112F // "PRESS THE SAPCE BAR.",00
|
|
ASC 1130:113F //
|
|
ASC 1140:1141 //
|
|
|
|
//ASC 1178:11C8
|
|
ASC 1178:117F // "MOVE YOUR JOYSTICK",8D,8D
|
|
ASC 1180:118F // "TO THE UPPER RIGHT,",8D,8D
|
|
ASC 1190:119F // "HOLD IT THERE AND",8D,8D
|
|
ASC 11A0:11AF // "PRESS THE SPACE BAR.",00
|
|
ASC 11B0:11BF
|
|
ASC 11C0:11C8
|
|
|
|
ASC 1201:120F // "TURN YOUR JOYSTICK 90 DEGREES (ONE",8D,8D
|
|
ASC 1210:121F // "QUARTER TURN), PRESS THE SPACE BAR",8D,8D
|
|
ASC 1220:122F // "AND TRY AGAIN.",00
|
|
ASC 1230:123F //
|
|
ASC 1240:124F //
|
|
ASC 1250:1257 //
|
|
|
|
ASC 127C:127F // "ADJUSTMENT DONE!",00
|
|
ASC 1280:128C
|
|
|
|
ASC 129A:129F // "RIGHT",00
|
|
|
|
ASC 12A4:12A8 // "LEFT",00
|
|
|
|
ASC 1803:180F // "WRITING DISK FILE - DO NOT RESET",00
|
|
ASC 1810:181F
|
|
ASC 1820:1823
|
|
|
|
ASC 1832:183F // ASC " ",00
|
|
ASC 1840:184F // SPC(31)
|
|
ASC 1850:1851
|
|
|
|
// Data
|
|
DB gWolf0 348 // "W" XREF @ $08AA,08CB
|
|
DB gWolf1 349 // "O" XREF @ $08B1,08D0
|
|
DB gWolf2 34A // "L" XREF @ $08B8,08D5
|
|
DB gWolf3 34B // "F" XREF @ $08C2,08D8
|
|
|
|
// DB B_034C 34C // Not used???
|
|
|
|
DB 34D // XREF @ 08DF: STA '0' #$30
|
|
DB 34E // XREF @ 08E2: STA '0' #$C0
|
|
DB 34F // XREF @ 08E7: STA '`' #$60
|
|
|
|
DB 350 // XREF @ 1879
|
|
DB 353 // XREF @ 187E
|
|
|
|
DW 930 // 0F 11 -> Cursor Y, X
|
|
|
|
DA 958 // pointer to $0E7A: "CASTLE"
|
|
|
|
DW 984
|
|
DW A03
|
|
|
|
// 76543210
|
|
// 11000000 $C0 Reversed
|
|
DB gControsl A9E
|
|
|
|
DW C06
|
|
DW C31
|
|
DW C64
|
|
DW CDC // VHTAB
|
|
|
|
DB gRank E5D // $10 = Private
|
|
|
|
DW EF4 // VHTAB 05 00
|
|
DW 1010 // VHTAB 04 00
|
|
DW 1096 // VHTAB
|
|
DW 1173 // VHTAB
|
|
DW 11FC // VHTAB
|
|
DW 1277 // VHTAB
|
|
DW 17FA // VTHAB
|
|
DW 182D // VTHAB
|
|
DW 1855 // VTHAB
|
|
|
|
DW COLORS 13EC:13FB // HGR Even and Odd Bytes for Colors
|
|
// 13EC: [0=000] 00 00 Black
|
|
// 13EE: [1=001] 55 2A Magenta
|
|
// 13F0: [2=010] 2A 55 Green
|
|
// 13F2: [3=011] 3F 3F White
|
|
// 13F4: [4=100] 80 00 Black
|
|
// 13F6: [5=101] D5 2A
|
|
// 13F8: [6=110] AA 55
|
|
// 13FA: [7=111] 7F 3F
|
|
|
|
DB 185B // ???
|
|
|
|
DB 1F00:1FA0 // XREF @A95
|
|
|
|
DB 1F09 // ??? @E66 STA
|
|
DB 1F0A // ??? @E6E STA
|
|
|
|
|
|
SYM DOS.RESET = 9DBF // Pronto-DOS
|
|
|
|
// --- Start $0880 ---
|
|
SYM INIT.MAIN = 880
|
|
SYM GAME.INIT = 8C9 // Sets 348: "WOLF" 38D", 34D:00,00,00, D9:FF, 76:7F
|
|
SYM GAME.CONT = 94F
|
|
|
|
SYM SelectKEYS = A73
|
|
SYM SelectJOY = A89
|
|
SYM SelectPAD = A7E
|
|
|
|
SYM WAIT.RET = C4D // Wait for RETURN to be pressed
|
|
DB CBD // @CB7 STA #$3C, @CC6 DEC
|
|
SYM NewGame = 0CCC
|
|
|
|
SYM SelectNewMap = DDF // Ctrl-C
|
|
SYM SelectPrivate = DDA // Ctrl-R
|
|
|
|
SYM PrintRank = 0E29 // @ gRank*16 = E5D, aRanks = E89
|
|
SYM _RankChar = E50
|
|
SYM _RankFindEOL = E47
|
|
SYM _RankExit = E79
|
|
SYN aRanks = E89 // Array of C Strings
|
|
|
|
SYM RET.STACK = 12BC // Adjust PC to skip inline data
|
|
SYM GET.PC = 12AA // Caller -> $10,$11
|
|
|
|
SYM CALLDOS = 12CF
|
|
DB DosLen 12E0 // Self-Modifying Code
|
|
SYM Next.DOS = 12DC
|
|
|
|
SYM Print = 12EB // Print to Text Screen
|
|
SYM _PrintNext = 12F3
|
|
DB _PrintLen 12F7 // Self-Modifying Code
|
|
|
|
SYM PutStrRet = 1302 // XREF @ none
|
|
SYM _PutStrRet = 130E // Looks to be unused???
|
|
DB _PutStrLen 1312
|
|
SYM _PutStrRet2 = 1318
|
|
|
|
SYM PutStr = 131E // Print string to HGR SCreen
|
|
SYM _PutNext = 1326
|
|
DB _PutLen 132A
|
|
|
|
SYM SET.HGR = 1335
|
|
SYM SET.TEXT = 133F
|
|
SYM SET.VHTAB = 1349
|
|
SYM CursorYX = 1353 // inline data -> Cursor Y, X
|
|
|
|
SYM DATA.AY = 135F // Get inline data -> A,Y; X = stack
|
|
SYM _RetAdd1 = 1377 // Return address++
|
|
SYM _RetPage = 137F // Same Page
|
|
|
|
SYM PrintSpaces = 1380 // XREF @ none -- Looks to be unused???
|
|
DB _SpcRows 139E // Usage: JSR PrintSpaces
|
|
DB _SpcCols 138A // DB Rows, Cols
|
|
|
|
SYM GetColors = 13FE // X=color, out: 13FC, 13FD
|
|
DB ColorEven 13FC
|
|
DB ColorOdd 13FD
|
|
|
|
SYM PutChar = 1435 // Print glyph to HGR screen
|
|
Sym _PutChar = 1476
|
|
SYm _ExitChar = 1495
|
|
DB GlyphSaveY 1496
|
|
DB GlyphSaveX 1498
|
|
SYM LineWrap = 149A // X Cursor > 40 chars? Yes
|
|
|
|
SYM RoomSel01 = 1591 // Select room 1, zRTSLo == Room Number
|
|
|
|
SYM random = 1615 // ??? XREF @15BD
|
|
SYM WallNextPtr = 169C // XREF @169C
|
|
SYM RoomNext = 16A6 // NextRoom. Return if (pRoom>>8) == $81
|
|
|
|
SYM UsePad = 1A4D // XREF @0A7E
|
|
SYM UseKey = 1A9E // XREF @0A73 SelectKeys
|
|
SYM UseJoy = 19E1 // XREF @0A89
|
|
|
|
// Unknown functions
|
|
|
|
SYM __0977__ = 0977 // ???
|
|
SYM __0C2E__ = 0C2E // ???
|
|
SYM __0C61__ = 0C61 // ???
|
|
SYM __0CB2__ = 0CB2 // ???
|
|
SYM __0CBC__ = 0CBC // ???
|
|
SYM __0CC1__ = 0CC1 // ???
|
|
SYM __0DEB__ = 0DEB // ???
|
|
SYM __0E5C__ = 0E5C // ???
|
|
SYM __0EF1__ = 0EF1 // ???
|
|
SYM __100D__ = 100D // ???
|
|
SYM __10EF__ = 10EF // ???
|
|
SYM __1269__ = 1269 // ???
|
|
SYM __1293__ = 1293 // ??? Print which hand
|
|
SYM __13A2__ = 13A2 // ???
|
|
SYM __13AA__ = 13AA // ???
|
|
SYM __13CB__ = 13CB // ???
|
|
SYM __141D__ = 141D // ???
|
|
SYM __1421__ = 1421 // ???
|
|
SYM __1429__ = 1429 // ???
|
|
SYM __142D__ = 142D // ???
|
|
SYM __14C8__ = 14C8 // ???
|
|
SYM __14DB__ = 14DB // ???
|
|
SYM __14F0__ = 14F0 // ??? Calls ROM $FD6F
|
|
SYM __15A8__ = 15A8 // ???
|
|
SYM __15AE__ = 15AE // ???
|
|
SYM __15B3__ = 15B3 // ??? XREF @15D9
|
|
SYM __15BD__ = 15BD // ??? XREF @15BA,15CB,15CF
|
|
SYM __15DC__ = 15DC // ???
|
|
SYM __15F3__ = 15F3 // ???
|
|
SYM __1626__ = 1626 // ???
|
|
SYM __16B1__ = 16B1 // ???
|
|
SYM __16BE__ = 16BE // ???
|
|
SYM __16C4__ = 16C4 // ???
|
|
SYM __16F5__ = 16F5 // ???
|
|
SYM __16F9__ = 16F9 // ??? XREF @1749
|
|
SYM __174C__ = 174C // ???
|
|
SYM __1769__ = 1769 // ??? XREF @177A,1786
|
|
SYM __17C2__ = 17C2 // ???
|
|
SYM __17F7__ = 17F7 // ???
|
|
SYM __182A__ = 182A // ???
|
|
SYM __185D__ = 185D // ??? XREF @ none
|
|
SYM __1864__ = 1864 // ???
|
|
SYM __18A0__ = 18A0 // ??? XREF @ $0955, inline 2 bytes
|
|
SYM __196F__ = 196F // ???
|
|
SYM __1976__ = 1976 // ???
|
|
SYM __19AD__ = 19AD // ???
|
|
|
|
// --- End 1B3D ---
|
|
|
|
// SEKTOR
|
|
// 4004 + 3DFC = 4004:7DFF
|
|
// Map Template for all castle room layout
|
|
|
|
// 4004..40FF // General Map Config
|
|
// Also $4004..40FF current room
|
|
DB 4040 // ??? @178B
|
|
DB 4041 // ??? @179D STZ
|
|
DB 4042 // ??? @17A0 STZ
|
|
DB 4047 // ??? @1798 ST #0A
|
|
DB 4048 // ??? @17A9 STZ
|
|
DB 4049 // ??? @17A3 STZ
|
|
DB 404A // ??? @17A6 STZ
|
|
DB 404B // ??? @1793 STA random + #80
|
|
DB 404C // ??? @17AC STZ
|
|
DB 4051 // ??? @17AF STZ
|
|
DB 4052 // ??? @17B2 STZ
|
|
DB 406A // ??? @0DEB
|
|
DB 406B // ??? @0DF1
|
|
DB 406C // ??? @0E10
|
|
DB 406D // ??? @0DFE dec
|
|
DB 406F // ??? @0965
|
|
|
|
DB Room01 4100:4100+FF
|
|
DB Room02 4200:4200+FF
|
|
DB Room03 4300:4300+FF
|
|
DB Room04 4400:4400+FF
|
|
DB Room05 4500:4500+FF
|
|
DB Room06 4600:4600+FF
|
|
DB Room07 4700:4700+FF
|
|
DB Room08 4800:4800+FF
|
|
DB Room09 4900:4900+FF
|
|
DB Room10 4A00:4A00+FF
|
|
DB Room11 4B00:4B00+FF
|
|
DB Room12 4C00:4C00+FF
|
|
DB Room13 4D00:4D00+FF
|
|
DB Room14 4E00:4E00+FF
|
|
DB Room15 4F00:4F00+FF
|
|
DB Room16 5000:5000+FF
|
|
DB Room17 5100:5100+FF
|
|
DB Room18 5200:5200+FF
|
|
DB Room19 5300:5300+FF
|
|
DB Room20 5400:5400+FF
|
|
DB Room21 5500:5500+FF
|
|
DB Room22 5600:5600+FF
|
|
DB Room23 5700:5700+FF
|
|
DB Room24 5800:5800+FF
|
|
DB Room25 5900:5900+FF
|
|
DB Room26 5A00:5A00+FF
|
|
DB Room27 5B00:5B00+FF
|
|
DB Room28 5C00:5C00+FF
|
|
DB Room29 5D00:5D00+FF
|
|
DB Room30 5E00:5E00+FF
|
|
DB Room31 5F00:5F00+FF
|
|
DB Room32 6000:5000+FF
|
|
DB Room33 6100:5100+FF
|
|
DB Room34 6200:5200+FF
|
|
DB Room35 6300:5300+FF
|
|
DB Room36 6400:5400+FF
|
|
DB Room37 6500:5500+FF
|
|
DB Room38 6600:5600+FF
|
|
DB Room39 6700:5700+FF
|
|
DB Room40 6800:5800+FF
|
|
DB Room41 6900:5900+FF
|
|
DB Room42 6A00:5A00+FF
|
|
DB Room43 6B00:5B00+FF
|
|
DB Room44 6C00:5C00+FF
|
|
DB Room45 6D00:5D00+FF
|
|
DB Room46 6E00:5E00+FF
|
|
DB Room47 6F00:5F00+FF
|
|
DB Room48 7000:5000+FF
|
|
DB Room49 7100:5100+FF
|
|
DB Room50 7200:5200+FF
|
|
DB Room51 7300:5300+FF
|
|
DB Room52 7400:5400+FF
|
|
DB Room53 7500:5500+FF
|
|
DB Room54 7600:5600+FF
|
|
DB Room55 7700:5700+FF
|
|
DB Room56 7800:5800+FF
|
|
DB Room57 7900:5900+FF
|
|
DB Room58 7A00:5A00+FF
|
|
DB Room59 7B00:5B00+FF
|
|
DB Room60 7C00:5C00+FF
|
|
DB Room61 7D00:5D00+FF
|
|
|
|
// DB Room01W 4049 // Left
|
|
// DB Room01E 404A // Right
|
|
// DB Room01N 404B // Forward
|
|
// DB Room01S 404C // Backward
|
|
// DB Room01U 404D // Stairs
|
|
// DB 4080:40FF
|
|
// DB 4100:417F
|
|
//
|
|
|
|
DB FONT 8400:87FF
|