Special Values Address Description $00 X-Position on map LOC1 Y-Position on map, address $01 $02 X-Position on world map $03 Y-Position on world map $C0 X-Position of window on map, upper left corner $C1 Y-Position of window on map, upper left corner $C2 Current X-position in window, (0-10) $C3 Current Y-position in window, (0-10) $C4 Current X-position of window on map $C5 Current Y-position of window on map $FC Map array index of position, left byte $FD Map array index of position, right byte BUF/IN Address $0200, the final screen map with LOS $0280 The initial screen map without LOS $8B00 The full size map, 32x32, 1024 bytes. $0EEC Sequence of numbers: 5,4,3,2,1,0,1,2,3,4,5 $0ED6 Sequence of numbers: 1,1,1,1,1,0,-1,-1,-1,-1,-1 $0EE1 Sequence of numbers: 11,11,11,11,11,0, -11,-11,-11,-11,-11 $EE00 The graphic pattern of the moving entity (32 element array) $EE20 The X-position of the moving entity (32 element array) $EE40 The Y-position of the moving entity (32 element array) $1F51 Sequence of numbers: 0,11,22,33,44,55,66,77,88,99,110 $ED Moongate graphic pattern (40-43) $EE Moongate X-coordinate $EF Moongate Y-coordinate $0D $0E Player graphic pattern 0C80 SEC Set carry bit 0C81 LDA $02 Set accumulator to X-Position on map 0C83 SBC #$05 Subtract 5 0C85 STA $C0 Store result in $C0 0C87 SEC Set carry bit 0C88 LDA $03 Set accumulator to Y-Position on map 0C8A SBC #$05 Subtract 5 0C8C STA $C1 Store result in $C1 0C8E LDA #$00 Clear accumulator 0C90 STA $C2 Clear $C2 0C92 STA $C3 Clear $C3 0C94 TAY Clear Y 0C95 TAX Clear X 0C96 CLC Clear carry bit 0C97 LDA $C0 Set accumulator to $C0 (window upper left) 0C99 ADC $C2 Add $C2 to accumulator (window offset) 0C9B STA $C4 Store result in $C4 0C9D CLC Clear carry bit 0C9E LDA $C1 Set accumulator to $C1 (window upper left) 0CA0 ADC $C3 Add $C3 to accumulator (window offset) 0CA2 STA $C5 Store result in $C5 0CA4 JSR $1507 Multiply accumulator by 16. 0CA7 STA $FC Store result in $FC 0CA9 LDA $C4 Set accumulator to $C4 (X-position on map) 0CAB AND #$0F AND accumulator to 0-15. 0CAD ORA $FC OR accumulator to value in $FC. 0CAF STA $FC Store result in $FC (part of array position on map) 0CB1 LDA $C5 Set accumulator to $C5 0CB3 AND #$10 AND accumulator to 0 or 16 0CB5 ASL Multiply accumulator by 2 0CB6 ORA $C4 OR accumulator to $C4 0CB8 JSR $1501 Divide accumulator by 16. 0CBB CLC Clear carry bit 0CBC ADC #$E8 Add 232 to accumulator 0CBE STA $FD Store result in $FD (final array position on map) 0CC0 LDA ($FC),Y Set accumulator to map address+Y value 0CC2 STA $0280,X Store this value at $0280+X 0CC5 INX Increment X 0CC6 INC $C2 Increment $C2 0CC8 LDA $C2 Set accumulator to $C2 0CCA CMP #$0B Compare to 11 0CCC BNE $C96 If not equal, branch to $0C96 0CCE STY $C2 Store Y into $C2 (Y is always 0) 0CD0 INC $C3 Increment $C3 0CD2 LDA $C3 Set accumulator to $C3 0CD4 CMP #$0B Compare to 11 0CD6 BNE $C96 If not equal, branch to $0C96 0CD8 LDX #$1F Set X to 31 0CDA LDA $EE00,X Set accumulator to $EE00+X (graphic pattern) 0CDD BEQ $0D0C If zero (empty), branch to $0D0C 0CDF LDA $EE20,X Set accumulator to $EE20+X (X-position) 0CE2 CLC Clear carry bit 0CE3 ADC #$05 Add 5 0CE5 SEC Set carry bit 0CE6 SBC $00 Subtract $00 (X-position) 0CE8 CMP #$0B Compare to 11 (window boundary) 0CEA BCS $0D0C If greater than, branch to $0D0C 0CEC STA $C4 Store result in $C4 0CEE LDA $EE40,X Set accumulator to $EE40+X (Y-position) 0CF1 CLC Clear carry bit 0CF2 ADC #$05 Add 5 0CF4 SEC Set carry bit 0CF5 SBC LOC1 Subtract LOC1 value (Y-position) 0CF7 CMP #$0B Compare to 11 (window boundary) 0CF9 BCS $0D0C If greater then, branch to $0D0C 0CFB STA $C5 Store result in $C5 0CFD LDY $C5 Set Y to $C5 0CFF LDA $1F51,Y Set accumulator to 0-110, step 11 0D02 CLC Clear carry bit 0D03 ADC $C4 Add $C4 (adjusted X 0-11) 0D05 TAY Set Y to accumulator (array position) 0D06 LDA $EE00,X Set accumulator to graphic pattern of entity 0D09 STA $0280,Y Store pattern in screen buffer at location 0D0C DEX Decrement X 0D0D BPL $0CDA If still positive, branch to $0CDA 0D0F LDA $ED Set accumulator to animation of moongate 0D11 BEQ $0D3D If zero, branch to $0D3D 0D13 LDA $EE Set accumulator to X-position of moongate 0D15 CLC Clear carry bit 0D16 ADC #$05 Add 5 0D18 SEC Set carry bit 0D19 SBC $00 Subtract X-position 0D1B CMP #$0B Compare to 11 0D1D BCS $0D3D If greater than, branch to $0D3D 0D1F STA $C4 Store result in $C4 0D21 LDA $EF Set accumulator to Y-position of moongate 0D23 CLC Clear carry bit 0D24 ADC #$05 Add 5 0D26 SEC Set carry bit 0D27 SBC LOC1 Subtract Y-position 0D29 CMP #$0B Compare to 11 0D2B BCS $0D3D If greater, branch to $0D3D 0D2D STA $C5 Store result in $C5 0D2F LDY $C5 Set Y to $C5 0D31 LDA $1F51,Y Set accumulator to 0-110, step 11 0D34 CLC Clear carry bit 0D35 ADC $C4 Add $C4 (adjusted X 0-11) 0D37 TAY Transfer to Y (array position) 0D38 LDA $ED Set accumulator to animation of moongate 0D3A STA $0280,Y Set location of moongate in map buffer 0D3D LDA $02B1 Set accumulator to value north of player 0D40 STA $C9 Store result in $C9 0D42 LDA $02C7 Set accumulator to value south of player 0D45 STA $CA Store result in $CA 0D47 LDA $02BD Set accumulator to value east of player 0D4A STA $CB Store result in $CB 0D4C LDA $02BB Set accumulator to value west of player 0D4F STA $CC Store result in $CC 0D51 LDA $02BC Set accumulator to value under player 0D54 STA $C8 Store result in $C8 0D56 LDA $0E Set accumulator to player graphic pattern 0D58 STA $02BC Store result at center of map 0D5B LDA $0D Set accumulator to $0D 0D5D BEQ $0D6D If zero, branch to $0D6D 0D5F LDX #$78 Set X to value 120 0D61 LDA $0280,X Set accumulator to map buffer value 0D64 STA BUF/IN,X Store result in map buffer at same position 0D67 DEX Decrement X 0D68 BPL $0D61 If still positive, branch to $0D61 0D6A JMP $0E74 Jump to $0E74 0D6D LDX #$78 Set X to value 120 0D6F LDA #$7E Set accumulator to value 126 (blank) 0D71 STA BUF/IN,X Store result in map buffer at same position 0D74 DEX Decrement X 0D75 BPL $0D71 If still positive, branch to $0D71 0D77 LDA #$78 Set accumulator to value 120 0D79 STA $F0 Store result in $F0 0D7B LDA #$0A Set accumulator to value 10 0D7D STA $C4 Set $C4 to 10 0D7F STA $C5 Set $C5 to 10 0D81 LDA $C4 Set accumulator to $C4 0D83 STA $C0 Set $C0 to $C4 0D85 LDA $C5 Set accumulator to $C5 0D87 STA $C1 Set $C1 to $C5 0D89 LDA $F0 Set accumulator to $F0 0D8B STA $F1 Set $F1 to $F0 0D8D LDX $C0 Set X to $C0 0D8F LDY $C1 Set Y to $C1 0D91 LDA $F1 Set accumulator to $F1 0D93 CLC Clear carry bit 0D94 ADC $OED6,X Add $0ED6+X to accumulator (-1 to 1) 0D97 CLC Clear carry bit 0D98 ADC $OEE1,Y Add $0EE1+Y to accumulator (-11 to 11) 0D9B CMP #$3C Compare result to 60 (center of window) 0D9D BEQ $0DCE If equal, branch to $0DCE (skip center) 0D9F STA $F1 Store accumulator in $F1 0DA1 TAX Transfer accumulator to X 0DA2 LDA $0280,X Set accumulator to value at map buffer 0DA5 CMP #$06 Compare to 6 (forest) 0DA7 BEQ $0DD6 If equal, branch to $0DD6 0DA9 CMP #$08 Compare to 8 (mountains) 0DAB BEQ $0DD6 If equal, branch to $0DD6 0DAD CMP #$49 Compare to 73 (secret passage) 0DAF BEQ $0DD6 If equal, branch to $0DD6 0DB1 CMP #$7E Compare to 126 (blank) 0DB3 BEQ $0DD6 If equal, branch to $0DD6 0DB5 CMP #$7F Compare to 127 (brick wall) 0DB7 BEQ $0DD6 If equal, branch to $0DD6 0DB9 LDA $C0 Set accumulator to $C0 (original start X) 0DBB TAX Transfer accumulator to X 0DBC CLC Clear carry bit 0DBD ADC $OED6,X Add $0ED6+X to accumulator (-1 to 1) 0DC0 STA $C0 Store result in $C0 0DC2 LDA $C1 Set accumulator to $C1 (original start Y) 0DC4 TAX Transfer accumulator to X 0DC5 CLC Clear carry bit 0DC6 ADC $OED6,X Add $0ED6+X to accumulator (-1 to 1) 0DC9 STA $C1 Store result in $C1 0DCB JMP $0D8D Jump to $0D8D 0DCE LDX $F0 Set X to $F0 (original array start point) 0DD0 LDA $0280,X Set accumulator to value at map buffer 0DD3 STA BUF/IN,X Store result in map buffer at same position 0DD6 DEC $F0 Decrement $F0 0DD8 DEC $C4 Decrement $C4 0DDA BPL $0D81 If positive, branch to $0D81 0DDC LDA #$0A Set accumulator to 10 0DDE STA $C4 Set $C4 to 10 0DE0 DEC $C5 Decrement $C5 0DE2 BPL $0D81 If positive, branch to $0D81 0DE4 LDA #$78 Set accumulator to 120 0DE6 STA $F0 Set $F0 to 120 0DE8 LDA #$0A Set accumulator to 10 0DEA STA $C4 Set $C4 to 10 0DEC STA $C5 Set $C5 to 10 0DEE LDA $C4 Set accumulator to $C4 0DF0 STA $C0 Set $C0 to $C4 0DF2 LDA $C5 Set accumulator to $C5 0DF4 STA $C1 Set $C1 to $C5 0DF6 LDA $F0 Set accumulator to $F0 0DF8 STA $F1 Set $F1 to $F0 0DFA TAX Set X to $F0 0DFB LDA BUF/IN,X Set accumulator to BUF/IN+X 0DFE CMP #$7E Compare to 126 (blank) 0E00 BNE $E63 If not equal, branch to $0E63 0E02 LDX $C0 Set X to $C0 0E04 LDY $C1 Set Y to $C1 0E06 LDA $0EEC,X Set accumulator to $0EEC+X 0E09 CMP $0EEC,Y Compare to $0EEC+Y 0E0C BEQ $E12 If equal, branch to $0E12 0E0E BCC $E31 If less, branch to $0E31 0E10 BCS $E25 If greater, branch to $0E25 0E12 LDA $F1 Set accumulator to $F1 0E14 CLC Clear carry bit 0E15 ADC $0ED6,X Add $0ED6+X to accumulator (-1 to 1) 0E18 CLC Clear carry bit 0E19 ADC $0EE1,Y Add $0EE1+Y to accumulator (-11 to 11) 0E1C JSR $0EF7 0E1F JSR $0F03 0E22 JMP $0E3A Jump to $0E3A 0E25 LDA $F1 Set accumulator to $F1 0E27 CLC Clear carry bit 0E28 ADC $0ED6,X Add $0ED6+X to accumulator (-1 to 1) 0E2B JSR $0EF7 0E2E JMP $0E3A Jump to $0E3A 0E31 LDA $F1 Set accumulator to $F1 0E33 CLC Clear carry bit 0E34 ADC $0EE1,Y Add $0EE1+Y to accumulator (-11 to 11) 0E37 JSR $0F03 0E3A CMP #$3C Compare to 60 (center of screen) 0E3C BEQ $E5B If equal, branch to $0E5B (skip) 0E3E STA $F1 Store result in $F1 0E40 TAX Transfer accumulator to X 0E41 LDA $0280,X Set accumulator to value at map buffer 0E44 CMP #$06 Compare to 6 (forest) 0E46 BEQ $E63 If equal, branch to $0E63 0E58 CMP #$08 Compare to 8 (mountains) 0E4A BEQ $E63 If equal, branch to $0E63 0E4C CMP #$49 Compare to 73 (secret passage) 0E4E BEQ $E63 If equal, branch to $0E63 0E50 CMP #$7E Compare to 126 (blank) 0E52 BEQ #E63 If equal, branch to $0E63 0E54 CMP #$7F Compare to 127 (brick wall) 0E56 BEQ $E63 If equal, branch to $0E63 0E58 JMP $0E02 Jump to $0E02 0E5B LDX $F0 Set X to $F0 0E5D LDA $0280,X Set accumulator to value at map buffer 0E60 STA BUF/IN,X Store result in new map buffer 0E63 DEC $F0 Decrement $F0 0E65 DEC $C4 Decrement $C4 0E67 BPL $DEE If $C4 is still positive, branch to $0DEE 0E69 LDA #$0A Set accumulator to 10 0E6B STA $C4 Set $C4 to 10 0E6D DEC $C5 Decrement $C5 0E6F BMI $E74 If negative, branch to $0E74 0E71 JMP $0DEE Jump to $0DEE 0E74 LDA #$00 Clear accumulator 0E76 STA $F2 Clear $F2 0E78 STA $0E9D Clear $0E9D 0E7B LDY $F2 Set Y to $F2 0E7D LDA $E008,Y Set accumulator to $E008+Y 0E80 STA $0EA6 Store result at $0EA6 0E83 STA $0EB0 Store result at $0EB0 0E86 LDA $E0C8,Y Set accumulator to $E0C8+Y 0E89 STA $0EA7 Store result at $0EA7 0E8C STA $0EB1 Store result at $0EB1 0E8F TYA Transfer Y to accumulator 0E90 AND #$0F AND accumulator to 0-15. 0E92 ORA #$D0 OR accumulator with value D0 (11010000) 0E94 STA $0EA4 Store result in $0EA4 0E97 STA $0EAE Store result in $0EAE 0E9A LDX #$01 Set X to 1 0E9C LDY $0279 Set Y to $0279 (last byte of old buffer) 0E9F BIT LCBANK1/ENAB Open LCBANK1 at 0E9D 0EA2 LDA $DF00,Y Set accumulator to $DF00+Y 0EA5 STA $3F50,X Store result at $3F50+X 0EA8 INX Increment X 0EA9 BIT LCBANK2 Open LCBANK2 at 0EA9 0EAC LDA $DF00,Y Set accumulator to $DF00+Y 0EAF STA $3F50,X Store result at $3F50+X 0EB2 INC $0E9D Increment $0E9D 0EB5 INX Increment X 0EB6 CPX #$17 Compare X to 33 0EB8 BCC $E9C If less, branch to $0E9C 0EBA INC $F2 Increment $F2 0EBC LDA $F2 Set accumulator to $F2 0EBE CMP #$B0 Compare to 176 0EC0 BEQ $ED5 If equal, branch to $0ED5 0EC2 AND #$0F AND accumulator to 0-15. 0EC4 BEQ $E7B If zero, branch to $0E7B 0EC6 LDA $0E9D Set accumulator to $0E9D 0EC9 SEC Set carry bit 0ECA SBC #$0B Subtract 10 0ECC STA $0E9D Store result at $0E9D 0ECF JSR $150C 0ED2 JMP $0E7B Jump to $0E7B 0ED5 RTS Return 1500 LSR Divide by 2 1501 LSR Divide by 2 1502 LSR Divide by 2 1503 LSR Divide by 2 1504 LSR Divide by 2 1505 RTS Return 1506 ASL Multiply by 2 1507 ASL Multiply by 2 1508 ASL Multiply by 2 1509 ASL Multiply by 2 150A ASL Multiply by 2 150B RTS Return 150C LDA KBD/CLR80COL Set accumulator to 150F BPL $152D If positive, branch to $152D 1511 CMP #$A0 Compare to 160 1513 BNE $1519 If not equal, branch to $1519 1515 LDY #$00 Clear Y 1517 STY $B8 Store result in $B8 1519 CMP #$FF Compare to 255 151B BNE $151F If not equal, branch to $151F 151D LDA #$88 Set accumulator to 136 151F LDY $B8 Set Y to $B8 1521 CPY #$08 Compare to 8 1523 BCS $152D If greater, branch to $152D 1525 STA $00B0,Y Store result at $00B0+Y 1528 INC $B8 Increment $B8 152A BIT KBDSTRB 152D RTS Return 0EF7 PHA Push accumulator onto stack 0EF8 LDA $C0 Set accumulator to $C0 0EFA TAX Transfer accumulator to X 0EFB CLC Clear carry bit 0EFC ADC $0ED6,X Add $0ED6+X to accumulator (-1 to 1) 0EFF STA $C0 Store result in $C0 0F01 PLA Pull stack into accumulator 0F02 RTS Return 0F03 PHA Push accumulator onto stack 0F04 LDA $C1 Set accumulator to $C1 0F06 TAX Transfer accumulator to X 0F07 CLC Clear carry bit 0F08 ADC $0ED6,X Add $0ED6+X to accumulator (-1 to 1) 0F0B STA $C1 Store result in $C1 0F0D PLA Pull stack into accumulator 0F0E RTS Return