; ;(C) 1983,1984,1999,2000 Matthew Smith - all rights reserved ; ;Disassembly of Manic Miner, done by John Elliott with the Dazzlestar ;disassembler under CP/M. ; ;Note: I have deleted most of the data structures (from the title screen onward) ; as the format of these areas is documented elsewhere. ; ; Compared to my JSW disassembly, this is very thinly commented indeed; I've ; only looked at bits which relate to the patch I did or which appear in ; the embedded source code. ; SCREEN EQU 4000h ATTR EQU 5800h WK_ATTR EQU 5C00h ;5C00h: Working attribute buffer. At 5C00h in JSW BK_ATTR EQU 5E00h ;5E00h: Background attribute buffer. At 5E00h in JSW T6000 EQU 6000h T7000 EQU 7000h SP_SWFS EQU 0B2E0h ;Room 0 vguard: SwordFish SP_PEDE EQU 0B6E0h ;Room 1 vguard: Pedestal SP_FOOT EQU 0BAE0h ;Room 2 vguard: Foot ORG 8000h ; ; Blank spaces in Manic Miner tend to fill up with source code. I have ; rendered these as DS directives and put the source code in comments. This ; means the code won't assemble to the same result, but it's much more ; readable. ; ; This is the source for data at T846E. ; ; [17-4-2004] Commented this section and gave it labels, based on Andrew ; Broad's room format ; ; ROOM_NAME: DEFS 20h ;8000: Room name ; ... 50,171,192,50,48,68 ; DB 50,48,58,50,171,192,50,136,137 ELEM_AIR: DEFS 9 ;8020: Air ELEM_WATER: DEFS 9 ;8029: Water ELEM_CRUMBLY: DEFS 9 ;8032: Crumbling floor ELEM_EARTH: DEFS 9 ;803B: Earth ; DB 50,136,137,50,114,115,50,76,77 ELEM_CONVEY: DEFS 9 ;8044: Conveyor ELEM_FIRE1: DEFS 9 ;804D: Fire (1) ELEM_FIRE2: DEFS 9 ;8056: Fire (2) ELEM_SWITCH DEFS 9 ;805F: Switch WILLY_Y: DEFB 0 ;8068: Willy vertical position, pixels WILLY_FRAME: DEFB 0 ;8069: Willy's current frame WILLY_DIR: DEFB 0 ;806A: Which way does Willy face? AIRBORNE: DEFB 0 ;806B: Willy jumping? WILLY_POS: DEFW 0 ;806C: Willy position in attribute file JUMP_DIST: DEFB 0 ;806E: Jump distance CONVEY_DIR: DEFB 0 ;806F: Conveyor direction CONVEY_POS: DEFW 0 ;8070: Conveyor animation position CONVEY_LEN: DEFB 0 ;8072: Conveyor length BORDER: DEFB 0 ;8073: Border PORTAL_CLOSED: DEFB 0 ;8074: Attribute of last item drawn ITEMS: DEFS 25 ;8075: Up to five items to collect ; 92,50,38,484 ; DB 50,38,4 DEFB 0FFh ;808E: End of item table PORTAL_ATTR: DEFB 0 ;808F: Portal attribute PORTAL_IMAGE: DEFS 32 ;8090: Portal image ; 50,171,192,50,48,68' ; DB 50,48, PORTAL_XY: DEFW 0,0 ;80B0: Portal position ITEM_GRAPHIC: DEFW 2C30h ;80B4: Item image DEFW 3731h DEFW 2C31h DEFW 3931h AIR_MAJOR: DEFB 0 ;80BC: Air supply + 32 AIR_MINOR: DEFB 0 ;80BD: Air pixel adjustment HGUARDS: DEFS 28 ;80BE: Horizontal guardians ; 50,136,137 DEFB 0FFh ; DB 50,136,137, B80DB: DEFB 0 ;80DB: Used when moving Eugene and Kong EUGHGT: DEFB 0 ;80DC: Height of Eugene VGUARDS: DEFS 20 ;80DD: Vertical guardians ; 114,115,50,76,77 ; B 50,76,77,50,171,203,50,38,51 DEFB 0FFh ; DB 50,38,51,50,171,203,50,51,64 ; ; 'special' graphic and guardian graphics ; DEFS 270 ; DB 50,51,64,50,171,203,50,128,129 ; DB 50,128,129,50,102,103,50,86,87 ; DB 50,64,65,50,128,171,50,32,43 ; DB 50,32,43,50,128,171,50,43,51 ; DB 50,43,51,50,128,171,50,128,129 ; DB 50,128,129,50,102 MANDAT: DEFB 6,0,3Eh,0,7Ch,0,34h,0,3Eh,0,3Ch,0,18h,0,3Ch,0,7Eh,0,7Eh DEFB 0,0F7h,0,0FBh,0,3Ch,0,76h,0,6Eh,0,77h,0,1,80h,0Fh,80h,1Fh DEFB 0,0Dh,0,0Fh,80h,0Fh,0,6,0,0Fh,0,1Bh,80h,1Bh,80h,1Bh,80h DEFB 1Dh,80h,0Fh,0,6,0,6,0,7,0 DEFB 0,60h,3,0E0h,7,0C0h,3,40h,3,0E0h,3,0C0h,1,80h,3,0C0h,7 DEFB 0E0h,7,0E0h,0Fh,70h,0Fh,0B0h,3,0C0h,7,60h,6,0E0h,7,70h DEFB 0,18h,0,0F8h,1,0F0h,0,0D0h,0,0F8h,0,0F0h,0,60h,0,0F0h,1 DEFB 0F8h,3,0FCh,7,0FEh,6,0F6h,0,0F8h,1,0DAh,3,0Eh,3,84h,18h DEFB 0,1Fh,0,0Fh,80h,0Bh,0,1Fh,0,0Fh,0,6,0,0Fh,0,1Fh,80h,3Fh DEFB 0C0h,7Fh,0E0h,6Fh,60h,1Fh,0,5Bh,80h,70h,0C0h,21h,0C0h,6 DEFB 0,7,0C0h,3,0E0h,2,0C0h,7,0C0h,3,0C0h,1,80h,3,0C0h,7,0E0h DEFB 7,0E0h,0Eh,0F0h,0Dh,0F0h,3,0C0h,6,0E0h,7,60h,0Eh,0E0h,1 DEFB 80h,1,0F0h,0,0F8h,0,0B0h,1,0F0h,0,0F0h,0,60h,0,0F0h,1,0F8h DEFB 1,0D8h,1,0D8h,1,0B8h,0,0F0h,0,60h,0,60h,0,0E0h,0,60h,0 DEFB 7Ch,0,3Eh,0,2Ch,0,7Ch,0,3Ch,0,18h,0,3Ch,0,7Eh,0,7Eh,0,0EFh DEFB 0,0DFh,0,3Ch,0,6Eh,0,76h,0,0EEh ; ; X,Y lookup table ; DEFW T6000 ,T6000+100h,T6000+200h,T6000+300h DEFW T6000+400h,T6000+500h,T6000+600h,T6000+700h DEFW T6000+ 20h,T6000+120h,T6000+220h,T6000+320h DEFW T6000+420h,T6000+520h,T6000+620h,T6000+720h DEFW T6000+ 40h,T6000+140h,T6000+240h,T6000+340h DEFW T6000+440h,T6000+540h,T6000+640h,T6000+740h DEFW T6000+ 60h,T6000+160h,T6000+260h,T6000+360h DEFW T6000+460h,T6000+560h,T6000+660h,T6000+760h DEFW T6000+ 80h,T6000+180h,T6000+280h,T6000+380h DEFW T6000+480h,T6000+580h,T6000+680h,T6000+780h DEFW T6000+0A0h,T6000+1A0h,T6000+2A0h,T6000+3A0h DEFW T6000+4A0h,T6000+5A0h,T6000+6A0h,T6000+7A0h DEFW T6000+0C0h,T6000+1C0h,T6000+2C0h,T6000+3C0h DEFW T6000+4C0h,T6000+5C0h,T6000+6C0h,T6000+7C0h DEFW T6000+0E0h,T6000+1E0h,T6000+2E0h,T6000+3E0h DEFW T6000+4E0h,T6000+5E0h,T6000+6E0h,T6000+7E0h ; ; Main entry point ; DI LD SP,MEMTOP JP START SHEET: DEFB 0 T8408: DEFB 0,1,0,1,1,3,1,3,2,0,2,0,0,1,2,3 S_AIR: DEFB 'AIR' DEFB '0000' HGHSCOR: DEFB '000000' DEFB '0000' SCORBUF: DEFB '000000' SCORES: DEFB 'High Score 000000' DEFB ' Score 000000' MESSG: DEFB 'Game' MESSO: DEFB 'Over' NOMEN: DEFB 0 ;No. of lives B8458: DEFB 0 KEMP: DEFB 0 ;Kempston joystick flag DEMO: DEFB 0 ;Demo mode? B845B: DEFB 0 T845C: DEFB 0 CHEAT: DEFB 0 ;Cheat mode? DEFW 01F1Fh ;---------- ;Cheat string CHEATDT: DEFW 0F1Fh ;----6----- DEFW 1E1Fh ;0--------- DEFW 1F1Bh ;-------3-- DEFW 1F1Eh ;---------1 DEFW 171Fh ;---7------ DEFW 0F1Fh ;----6----- DEFW 1D1Fh ;-9-------- T846E: DEFB 50h,80h,81h,50h,66h,67h,50h,56h,57h,32h,56h,57h,32h,0ABh DEFB 0CBh,32h,2Bh,33h,32h,2Bh,33h,32h,0ABh,0CBh,32h,33h,40h DEFB 32h,33h,40h,32h,0ABh,0CBh,32h,80h,81h,32h,80h,81h,32h,66h DEFB 67h,32h,56h,57h,32h,60h,56h,32h,0ABh,0C0h,32h,2Bh,30h,32h DEFB 2Bh,30h ; ; Source for this bit is at 08000h ; DEFB 32h,0ABh,0C0h,32h,30h,44h,32h,30h,44h,32h,0ABh DEFB 0C0h,32h,88h,89h,32h,88h,89h,32h,72h,73h,32h,4Ch,4Dh,32h DEFB 4Ch,4Dh,32h,0ABh,0C0h,32h,26h,30h,32h,26h,30h,32h,0ABh DEFB 0C0h,32h,30h,44h,32h,30h,44h,32h,0ABh,0C0h,32h,88h,89h DEFB 32h,88h,89h,32h,72h,73h,32h,4Ch,4Dh,32h,4Ch,4Dh,32h,0ABh DEFB 0CBh,32h,26h,33h,32h,26h,33h,32h,0ABh,0CBh,32h,33h,40h DEFB 32h,33h,40h,32h,0ABh,0CBh,32h,80h,81h,32h,80h,81h,32h,66h DEFB 67h,32h,56h,57h,32h,40h,41h,32h,80h,0ABh,32h,20h,2Bh,32h DEFB 20h,2Bh,32h,80h,0ABh,32h,2Bh,33h,32h,2Bh,33h,32h,80h,0ABh DEFB 32h,80h,81h,32h,80h,81h,32h,66h,67h,32h,56h,57h,32h,40h DEFB 41h,32h,80h,98h,32h,20h,26h,32h,20h,26h,32h,80h,98h,32h DEFB 26h,30h,32h,26h,30h,32h,0,0,32h,72h,73h,32h,72h,73h,32h DEFB 60h,61h,32h,4Ch,4Dh,32h,4Ch,99h,32h,4Ch,4Dh,32h,4Ch,4Dh DEFB 32h,4Ch,99h,32h,5Bh,5Ch,32h,56h,57h,32h,33h,0CDh,32h,33h DEFB 34h,32h,33h,34h,32h,33h,0CDh,32h,40h,41h,32h,66h,67h,64h DEFB 66h,67h,32h,72h,73h,64h,4Ch,4Dh,32h,56h,57h,32h,80h,0CBh DEFB 19h,80h,0,19h,80h,81h,32h,80h,0CBh,0FFh T858C: DEFB 80h,72h,66h,60h,56h,66h,56h,56h,51h,60h,51h,51h,56h,66h DEFB 56h,56h,80h,72h,66h,60h,56h,66h,56h,56h,51h,60h,51h,51h DEFB 56h,56h,56h,56h,80h,72h,66h,60h,56h,66h,56h,56h,51h,60h DEFB 51h,51h,56h,66h,56h,56h,80h,72h,66h,60h,56h,66h,56h,40h DEFB 56h,66h,80h,66h,56h,56h,56h,56h ; ; Game restart point ; START: XOR A LD (SHEET),A LD (KEMP),A LD (DEMO),A LD (B845B),A LD (B8458),A LD A,2 ;Initial lives count LD (NOMEN),A LD HL,T845C SET 0,(HL) LD HL,SCREEN LD DE,SCREEN+1 LD BC,17FFh ;Clear screen image LD (HL),0 LDIR LD HL,0A000h ;Title screen bitmap LD DE,SCREEN LD BC,4096 LDIR LD HL,SCREEN + 800h + 1*32 + 29 LD DE,MANDAT+64 LD C,0 CALL DRWFIX LD HL,0FC00h ;Attributes for the last room LD DE,ATTR ;(top third) LD BC,256 LDIR LD HL,09E00h ;Attributes for title screen LD BC,512 ;(bottom two-thirds) LDIR LD BC,31 DI XOR A R8621: IN E,(C) OR E DJNZ R8621 ;$-03 AND 20h JR NZ,R862F ;$+07 LD A,1 LD (KEMP),A R862F: LD IY,T846E CALL C92DC JP NZ,L8684 XOR A LD (EUGHGT),A R863D: LD A,(EUGHGT) LD IX,TITLEMSG DEFB 0DDh LD L,A ;LD XL,A LD DE,SCREEN+4096+3*32 LD C,20h CALL PMESS LD A,(EUGHGT) AND 6 RRCA RRCA RRCA LD E,A LD D,82h LD HL,SCREEN + 100h + 1*32 + 29 LD C,0 CALL DRWFIX LD BC,100 R8664: DJNZ R8664 ;$-00 DEC C JR NZ,R8664 ;$-03 LD BC,0BFFEh IN A,(C) AND 1 CP 1 JR NZ,L8684 ;$+12 LD A,(EUGHGT) INC A CP 0E0h LD (EUGHGT),A JR NZ,R863D ;$-40 LD A,40h LD (DEMO),A L8684: LD HL,SCORBUF-4 LD DE,SCORBUF-3 LD BC,9 LD (HL),30h LDIR NEWSHT: LD A,(SHEET) SLA A ;*512 SLA A ;*1k ADD A,0B0h ;+B000 LD H,A LD L,0 ;Copy the first half-k to BK_ATTR, LD DE,BK_ATTR LD BC,512 LDIR ;and the second to ROOM_NAME. LD DE,ROOM_NAME LD BC,512 LDIR CALL C8A75 LD HL,SCREEN+4096 LD DE,SCREEN+4097 LD BC,2047 LD (HL),0 LDIR LD IX,ROOM_NAME LD C,20h LD DE,SCREEN+4096 CALL PMESS LD IX,S_AIR LD C,3 LD DE,SCREEN+4096+1*32 CALL PMESS LD A,52h R86D7: LD H,A LD D,A LD L,24h LD E,25h LD B,A LD A,(AIR_MAJOR) SUB 24h LD C,A LD A,B LD B,0 LD (HL),0FFh LDIR INC A CP 56h JR NZ,R86D7 ;$-17 LD IX,SCORES LD DE,SCREEN+4096+3*32 LD C,20h CALL PMESS LD A,(BORDER) ;Border LD C,0FEh OUT (C),A LD A,(DEMO) OR A JR Z,LOOP ;$+07 LD A,40h LD (DEMO),A ; ;Main game loop ; LOOP: LD A,(NOMEN) LD HL,SCREEN + 4096 + 5*32 OR A JR Z,R8730 ;$+1B LD B,A R8718: LD C,0 PUSH HL PUSH BC LD A,(B845B) RLCA RLCA RLCA AND 60h LD E,A LD D,82h CALL DRWFIX POP BC POP HL INC HL INC HL DJNZ R8718 ;$-16 R8730: LD A,(CHEAT) CP 7 JR NZ,R873F ;$+0A LD DE,SP_FOOT LD C,0 CALL DRWFIX R873F: LD HL,BK_ATTR LD DE,WK_ATTR LD BC,512 LDIR LD HL,T7000 LD DE,T6000 LD BC,4096 LDIR CALL C8D0F LD A,(DEMO) OR A CALL Z,C8ABB LD A,(DEMO) OR A CALL Z,C923A CALL C8DAA ;In JSW this is at 89ECh. CALL C9105 CALL PAINT_ITEMS ; ; Special-case code ; LD A,(SHEET) CP 4 ;Eugene's Lair CALL Z,EUGENE LD A,(SHEET) CP 0Dh ;Skylab Landing Bay JP Z,SKYLAB LD A,(SHEET) CP 8 ;Wacky Amoebatrons and more: Vertical guardians CALL NC,VGUARD LD A,(SHEET) CP 7 ;Kong Beast CALL Z,KONG LD A,(SHEET) CP 0Bh ;Kong Beast CALL Z,KONG LD A,(SHEET) CP 12h ;Solar Power Generator CALL Z,SOLAR L879F: CALL CHK_PORTAL L87A2: LD HL,T6000 LD DE,SCREEN LD BC,4096 LDIR LD A,(B8458) OR A JR Z,R87C8 ;$+17 DEC A LD (B8458),A RLCA RLCA RLCA AND 38h LD HL,WK_ATTR LD DE,WK_ATTR+1 LD BC,511 LD (HL),A LDIR R87C8: LD HL,WK_ATTR LD DE,ATTR LD BC,512 LDIR LD IX,SCORBUF LD DE,SCREEN + 4096 + 5*32 + 26 ;AT 21,26 LD C,6 CALL PMESS LD IX,HGHSCOR LD DE,SCREEN + 4096 + 3*32 + 11 LD C,6 CALL PMESS CALL AIR_DOWN ;Normal decrease of air. JP Z,MANDEAD LD BC,0FEFEh IN A,(C) LD E,A LD B,7Fh IN A,(C) OR E AND 1 JP Z,START LD B,0FDh ;Check the A-G row for Pause. IN A,(C) AND 1Fh CP 1Fh JR Z,R8815 ;$+0C R880B: LD B,2 ;In a pause. Wait for a keypress in any IN A,(C) ;other row than A-G. AND 1Fh CP 1Fh JR Z,R880B ;$-08 R8815: LD A,(AIRBORNE) CP 0FFh JP Z,MANDEAD LD B,0BFh LD HL,T845C IN A,(C) AND 1Fh CP 1Fh JR Z,R8834 ;$+0C BIT 0,(HL) JR NZ,R8836 ;$+0A LD A,(HL) XOR 3 LD (HL),A JR R8836 ;$+04 R8834: RES 0,(HL) R8836: BIT 1,(HL) JR NZ,NONOTE4 ;$+27 LD A,(B845B) INC A LD (B845B),A AND 7Eh RRCA LD E,A LD D,0 LD HL,T858C ADD HL,DE LD A,(BORDER) ;Border LD E,(HL) LD BC,3 TM51: OUT (0FEh),A ; ;Source for this bit is present at X934C ; X8854: DEC E JR NZ,NOFLP6 LD E,(HL) XOR 18h NOFLP6: DJNZ TM51 ;$-08 DEC C JR NZ,TM51 ;$-0B NONOTE4: LD A,(DEMO) OR A JR Z,NODEM1 ;$+21 DEC A JP Z,MANDEAD LD (DEMO),A LD BC,0FEh ;Check for any keypress IN A,(C) AND 1Fh CP 1Fh ;and if there is one, return to the opening JP NZ,START ;screen. LD A,(KEMP) OR A JR Z,NODEM1 ;$+08 IN A,(1Fh) OR A JP NZ,START NODEM1: LD BC,0EFFEh ;Keys 6-9 IN A,(C) BIT 4,A ;Check for "6" JP NZ,CKCHEAT LD A,(CHEAT) ;and if it's pressed, check for cheat mode CP 7 JP NZ,CKCHEAT LD B,0F7h ;And if it's on, get the room from keys IN A,(C) ;1-5 CPL AND 1Fh CP 14h ;If it's >20, cancel JP NC,CKCHEAT LD (SHEET),A ;Else jump to new room JP NEWSHT CKCHEAT: LD A,(CHEAT) ;If in cheat mode, don't check CP 7 JP Z,LOOP RLCA LD E,A LD D,0 LD IX,CHEATDT ADD IX,DE LD BC,0F7FEh ;Test keys 1-5 IN A,(C) AND 1Fh CP (IX+0) ;Next character in sequence? JR Z,CKNXCHT CP 1Fh ;No character? JP Z,LOOP CP (IX+-2) ;Current character in sequence? JP Z,LOOP XOR A ;Incorrect character LD (CHEAT),A JP LOOP CKNXCHT: ;Test keys 6-9 LD B,0EFh IN A,(C) AND 1Fh CP (IX+1) ;Next character JR Z,INCCHT CP 1Fh ;No character JP Z,LOOP CP (IX+-1) ;Current character JP Z,LOOP XOR A ;Incorrect character LD (CHEAT),A JP LOOP INCCHT: LD A,(CHEAT) ;Move to next character in the code INC A LD (CHEAT),A JP LOOP ; MANDEAD: LD A,(DEMO) OR A JP NZ,NXSHEET LD A,47h LPDEAD1: LD HL,ATTR LD DE,ATTR+1 LD BC,511 ;Attributes to white on black LD (HL),A LDIR LD E,A CPL AND 7 RLCA RLCA RLCA OR 7 LD D,A LD C,E RRC C RRC C RRC C OR 10h XOR A TM21: OUT (0FEh),A XOR 18h LD B,D TM22: DJNZ TM22 DEC C JR NZ,TM21 LD A,E DEC A CP 3Fh JR NZ,LPDEAD1 LD HL,NOMEN LD A,(HL) OR A JP Z,ENDGAM DEC (HL) JP NEWSHT ENDGAM: LD HL,HGHSCOR ;Compare high score LD DE,SCORBUF ;with current score LD B,6 LPHGH: LD A,(DE) CP (HL) JP C,FEET ;Current score is less JP NZ,NEWHGH ;Current score is more INC HL INC DE DJNZ LPHGH NEWHGH: LD HL,SCORBUF ;Set high score to current LD DE,HGHSCOR LD BC,6 LDIR FEET: LD HL,SCREEN ;Foot animation LD DE,SCREEN+1 LD BC,4095 LD (HL),0 LDIR XOR A ;Eugene's height LD (EUGHGT),A LD DE,MANDAT+64 LD HL,SCREEN+800h+4*32+15 LD C,0 CALL DRWFIX ;Draw Willy LD DE,SP_PEDE LD HL,SCREEN+800h+6*32+15 LD C,0 CALL DRWFIX ;Draw pedestal LOOPFT: LD A,(EUGHGT) LD C,A LD B,83h LD A,(BC) ;Calc foot position OR 0Fh LD L,A INC BC LD A,(BC) SUB 20h LD H,A LD DE,SP_FOOT LD C,0 CALL DRWFIX ;Draw foot LD A,(EUGHGT) CPL LD E,A XOR A LD BC,64 TM111: OUT (0FEh),A XOR 18h LD B,E TM112: DJNZ TM111 ;$-00 DEC C JR NZ,TM112 ;$-08 LD HL,ATTR LD DE,ATTR+1 LD BC,511 LD A,(EUGHGT) AND 0Ch ;Flicker colours RLCA OR 47h LD (HL),A LDIR LD A,(EUGHGT) ADD A,4 LD (EUGHGT),A CP 0C4h JR NZ,LOOPFT ;$-48 LD IX,MESSG LD C,4 LD DE,SCREEN + 6*32 + 10 CALL PMESS LD IX,MESSO LD C,4 LD DE,SCREEN + 6*32 + 18 CALL PMESS LD BC,0 LD D,6 TM91: DJNZ TM91 LD A,C ;Make the "game over" message flicker AND 7 OR 40h LD (ATTR + 6*32 + 10),A INC A AND 7 OR 40h LD (ATTR + 6*32 + 11),A INC A AND 7 OR 40h LD (ATTR + 6*32 + 12),A INC A AND 7 OR 40h LD (ATTR + 6*32 + 13),A INC A AND 7 OR 40h LD (ATTR + 6 * 32 + 18),A INC A AND 7 OR 40h LD (ATTR + 6 * 32 + 19),A INC A AND 7 OR 40h LD (ATTR + 6 * 32 + 20),A INC A AND 7 OR 40h LD (ATTR + 6 * 32 + 21),A DEC C JR NZ,TM91 DEC D JR NZ,TM91 JP START AIR_DOWN: LD A,(AIR_MINOR) SUB 4 LD (AIR_MINOR),A CP 0FCh JR NZ,R8A55 ;$+0F LD A,(AIR_MAJOR) CP 24h RET Z DEC A LD (AIR_MAJOR),A LD A,(AIR_MINOR) R8A55: AND 0E0h RLCA RLCA RLCA LD E,0 OR A JR Z,R8A66 ;$+09 LD B,A R8A60: RRC E SET 7,E DJNZ R8A60 ;$-04 R8A66: LD A,(AIR_MAJOR) LD L,A LD H,52h LD B,4 R8A6E: LD (HL),E INC H DJNZ R8A6E ;$-02 XOR A INC A RET C8A75: LD IX,BK_ATTR LD A,70h LD (L8A9B+1),A CALL C8A8A LD IX,T5E00 + 100h LD A,78h LD (L8A9B+1),A C8A8A: LD C,0 L8A8C: LD E,C LD A,(IX+0) LD HL,ELEM_AIR LD BC,72 CPIR LD C,E LD B,8 L8A9B: LD D,0 R8A9D: LD A,(HL) LD (DE),A INC HL INC D DJNZ R8A9D ;$-04 INC IX INC C JP NZ,L8A8C LD A,(SHEET) CP 13h RET NZ LD HL,0A000h ;Title page LD DE,T7000 LD BC,2048 LDIR RET C8ABB: LD A,(AIRBORNE) CP 1 JR NZ,NOT_JUMPING ;$+50 LD A,(JUMP_DIST) RES 0,A SUB 8 LD HL,WILLY_Y ADD A,(HL) LD (HL),A CALL C8B82 LD A,(ELEM_EARTH) CP (HL) JP Z,L8BA2 INC HL CP (HL) JP Z,L8BA2 LD A,(JUMP_DIST) INC A LD (JUMP_DIST),A SUB 8 JP P,L8AEB NEG L8AEB: INC A RLCA RLCA RLCA LD D,A LD C,20h LD A,(BORDER) ;Border R8AF5: OUT (0FEh),A XOR 18h LD B,D R8AFA: DJNZ R8AFA ;$-00 DEC C JR NZ,R8AF5 ;$-08 LD A,(JUMP_DIST) CP 12h JP Z,L8B96 CP 10h JR Z,NOT_JUMPING ;$+07 CP 0Dh JP NZ,L8C83 NOT_JUMPING: ;This corresponds to JSW at 0E36h or so. LD A,(WILLY_Y) AND 0Fh JR NZ,FALL_INTO ;$+3C LD HL,(WILLY_POS) LD DE,64 ADD HL,DE LD A,(ELEM_CRUMBLY) CP (HL) CALL Z,CRUMBLE LD A,(ELEM_FIRE1) CP (HL) JR Z,FALL_INTO ;$+28 LD A,(ELEM_FIRE2) CP (HL) JR Z,FALL_INTO ;$+22 INC HL LD A,(ELEM_CRUMBLY) CP (HL) CALL Z,CRUMBLE LD A,(ELEM_FIRE1) CP (HL) JR Z,FALL_INTO ;$+14 LD A,(ELEM_FIRE2) CP (HL) JR Z,FALL_INTO ;$+0E LD A,(ELEM_AIR) CP (HL) DEC HL JP NZ,L8BDD CP (HL) JP NZ,L8BDD FALL_INTO: LD A,(AIRBORNE) CP 1 JP Z,L8C83 LD HL,WILLY_DIR RES 1,(HL) OR A JP Z,L8B9C INC A LD (AIRBORNE),A RLCA RLCA RLCA RLCA LD D,A LD C,20h LD A,(BORDER) ;Border R8B70: OUT (0FEh),A XOR 18h LD B,D R8B75: DJNZ R8B75 ;$-00 DEC C JR NZ,R8B70 ;$-08 LD A,(WILLY_Y) ADD A,8 LD (WILLY_Y),A C8B82: AND 0F0h LD L,A XOR A RL L ADC A,5Ch LD H,A LD A,(WILLY_POS) AND 1Fh OR L LD L,A LD (WILLY_POS),HL RET L8B96: LD A,6 LD (AIRBORNE),A RET L8B9C: LD A,2 LD (AIRBORNE),A RET L8BA2: LD A,(WILLY_Y) ADD A,10h AND 0F0h LD (WILLY_Y),A CALL C8B82 LD A,2 LD (AIRBORNE),A LD HL,WILLY_DIR RES 1,(HL) RET CRUMBLE: LD C,L ;eg: in Central Cavern, HL = 5D97 LD A,H ;then BC becomes 7F97. ADD A,1Bh OR 7 LD B,A ;BC = address of graphic for this cell. R8BC1: DEC B ;Move graphic down 1 row. LD A,(BC) INC B LD (BC),A DEC B LD A,B AND 7 JR NZ,R8BC1 ;$-08 XOR A LD (BC),A LD A,B ADD A,7 LD B,A LD A,(BC) ;Introduce a blank line at the top. OR A RET NZ LD A,(ELEM_AIR) INC H INC H LD (HL),A DEC H DEC H RET L8BDD: LD A,(AIRBORNE) CP 0Ch JP NC,L8D06 LD E,0FFh XOR A LD (AIRBORNE),A LD A,(ELEM_CONVEY) CP (HL) JR Z,R8BF5 ;$+06 INC HL CP (HL) JR NZ,R8BFB ;$+08 R8BF5: LD A,(CONVEY_DIR) SUB 3 LD E,A R8BFB: LD BC,0DFFEh IN A,(C) AND 1Fh OR 20h AND E LD E,A LD BC,0FBFEh IN A,(C) AND 1Fh RLC A OR 1 AND E LD E,A LD B,0F7h IN A,(C) RRCA OR 0F7h AND E LD E,A LD B,0EFh IN A,(C) OR 0FBh AND E LD E,A LD A,(KEMP) OR A JR Z,R8C34 ;$+0C LD BC,1Fh IN A,(C) AND 3 CPL AND E LD E,A R8C34: LD C,0 LD A,E AND 2Ah CP 2Ah JR Z,R8C3F ;$+04 LD C,4 R8C3F: LD A,E AND 15h CP 15h JR Z,R8C48 ;$+04 SET 3,C R8C48: LD A,(WILLY_DIR) ADD A,C LD C,A LD B,0 LD HL,T8408 ADD HL,BC LD A,(HL) LD (WILLY_DIR),A LD BC,07EFEh IN A,(C) AND 1Fh CP 1Fh JR NZ,R8C7B ;$+1B LD B,0EFh IN A,(C) AND 9 CP 9 JR NZ,R8C7B ;$+11 LD A,(KEMP) OR A JR Z,L8C83 ;$+13 LD BC,1Fh IN A,(C) BIT 4,A JR Z,L8C83 ;$+0A R8C7B: XOR A LD (JUMP_DIST),A INC A LD (AIRBORNE),A L8C83: LD A,(WILLY_DIR) AND 2 RET Z LD A,(WILLY_DIR) AND 1 JP Z,L8CCA LD A,(WILLY_FRAME) OR A JR Z,R8C9C ;$+07 DEC A LD (WILLY_FRAME),A RET R8C9C: LD HL,(WILLY_POS) DEC HL LD DE,32 ADD HL,DE LD A,(ELEM_EARTH) CP (HL) RET Z LD A,(WILLY_Y) AND 0Fh JR Z,R8CB9 ;$+0B LD A,(ELEM_EARTH) ADD HL,DE CP (HL) RET Z OR A SBC HL,DE R8CB9: LD A,(ELEM_EARTH) OR A SBC HL,DE CP (HL) RET Z LD (WILLY_POS),HL LD A,3 LD (WILLY_FRAME),A RET L8CCA: LD A,(WILLY_FRAME) CP 3 JR Z,R8CD6 ;$+07 INC A LD (WILLY_FRAME),A RET R8CD6: LD HL,(WILLY_POS) INC HL INC HL LD DE,32 LD A,(ELEM_EARTH) ADD HL,DE CP (HL) RET Z LD A,(WILLY_Y) AND 0Fh JR Z,R8CF4 ;$+0B LD A,(ELEM_EARTH) ADD HL,DE CP (HL) RET Z OR A SBC HL,DE R8CF4: LD A,(ELEM_EARTH) OR A SBC HL,DE CP (HL) RET Z DEC HL LD (WILLY_POS),HL XOR A LD (WILLY_FRAME),A RET L8D05: POP HL L8D06: POP HL L8D07: LD A,0FFh LD (AIRBORNE),A JP L87A2 C8D0F: LD IY,HGUARDS LD DE,7 R8D16: LD A,(IY+0) CP 0FFh RET Z OR A JR Z,R8D6F ;$+52 LD A,(AIR_MINOR) AND 4 RRCA RRCA RRCA AND (IY+0) JR NZ,R8D6F ;$+45 LD A,(IY+4) CP 3 JR Z,R8D43 ;$+12 CP 4 JR Z,R8D5A ;$+25 JR NC,R8D3E ;$+07 INC (IY+4) JR R8D6F ;$+33 R8D3E: DEC (IY+4) JR R8D6F ;$+2E R8D43: LD A,(IY+1) CP (IY+6) JR NZ,R8D51 ;$+08 LD (IY+4),7 JR R8D6F ;$+20 R8D51: LD (IY+4),0 INC (IY+1) JR R8D6F ;$+17 R8D5A: LD A,(IY+1) CP (IY+5) JR NZ,R8D68 ;$+08 LD (IY+4),0 JR R8D6F ;$+09 R8D68: LD (IY+4),7 DEC (IY+1) R8D6F: ADD IY,DE JR R8D16 ;$-5B SOLAR: LD HL,WK_ATTR+23 LD DE,32 R8D79: LD A,(ELEM_WATER) CP (HL) RET Z LD A,(ELEM_EARTH) CP (HL) RET Z LD A,27h CP (HL) JR NZ,R8D98 ;$+12 EXX CALL AIR_DOWN ;Hit by solar beam? CALL AIR_DOWN CALL AIR_DOWN CALL AIR_DOWN EXX JR R8DA5 ;$+0F R8D98: LD A,(ELEM_AIR) CP (HL) JR Z,R8DA5 ;$+09 LD A,E XOR 0DFh LD E,A LD A,D CPL LD D,A R8DA5: LD (HL),77h ADD HL,DE JR R8D79 ;$-2F C8DAA: LD IY,HGUARDS R8DAE: LD A,(IY+0) CP 0FFh RET Z OR A JR Z,R8DF1 ;$+3C LD DE,31 LD L,(IY+1) LD H,(IY+2) AND 7Fh LD (HL),A INC HL LD (HL),A ADD HL,DE LD (HL),A INC HL LD (HL),A LD C,1 LD A,(IY+4) RRCA RRCA RRCA LD E,A LD A,(SHEET) CP 7 JR C,R8DE3 ;$+0C CP 9 JR Z,R8DE3 ;$+08 CP 0Fh JR Z,R8DE3 ;$+04 SET 7,E R8DE3: LD D,81h LD L,(IY+1) LD H,(IY+3) CALL DRWFIX JP NZ,L8D06 R8DF1: LD DE,7 ADD IY,DE JR R8DAE ;$-48 EUGENE: LD A,(PORTAL_CLOSED) OR A JR Z,R8E0F ;$+13 LD A,(B80DB) OR A JR Z,R8E0F ;$+0D LD A,(EUGHGT) DEC A JR Z,R8E1C ;$+14 LD (EUGHGT),A JR R8E24 ;$+17 R8E0F: LD A,(EUGHGT) INC A CP 58h JR Z,R8E1C ;$+07 LD (EUGHGT),A JR R8E24 ;$+0A R8E1C: LD A,(B80DB) XOR 1 LD (B80DB),A R8E24: LD A,(EUGHGT) AND 7Fh RLCA LD E,A LD D,83h LD A,(DE) OR 0Fh LD L,A INC DE LD A,(DE) LD H,A LD DE,VGUARDS+3 ;Vertical guardian 0's position LD C,1 CALL DRWFIX JP NZ,L8D06 LD A,(EUGHGT) AND 78h RLCA OR 7 SCF RL A LD L,A LD A,0 ADC A,5Ch LD H,A LD A,(PORTAL_CLOSED) OR A LD A,7 JR NZ,R8E5F ;$+09 LD A,(AIR_MINOR) RRCA RRCA AND 7 R8E5F: C8E5F: LD (HL),A LD A,(ELEM_AIR) AND 0F8h OR (HL) LD (HL),A LD DE,31 INC HL LD (HL),A ADD HL,DE LD (HL),A INC HL LD (HL),A ADD HL,DE LD (HL),A INC HL LD (HL),A RET SKYLAB: LD IY,VGUARDS R8E79: LD A,(IY+0) CP 0FFh JP Z,L879F LD A,(IY+2) CP (IY+6) JR NC,R8E91 ;$+0A ADD A,(IY+4) LD (IY+2),A JR R8EAF ;$+20 R8E91: INC (IY+1) LD A,(IY+1) CP 8 JR NZ,R8EAF ;$+16 LD A,(IY+5) LD (IY+2),A LD A,(IY+3) ADD A,8 AND 1Fh LD (IY+3),A LD (IY+1),0 R8EAF: LD E,(IY+2) RLC E LD D,83h LD A,(DE) ADD A,(IY+3) LD L,A INC DE LD A,(DE) LD H,A LD A,(IY+1) RRCA RRCA RRCA LD E,A LD D,81h LD C,1 CALL DRWFIX JP NZ,L8D07 LD A,(IY+2) AND 40h RLCA RLCA ADD A,5Ch LD H,A LD A,(IY+2) RLCA RLCA AND 0E0h OR (IY+3) LD L,A LD A,(IY+0) CALL C8E5F LD DE,7 ADD IY,DE JR R8E79 ;$-76 VGUARD: LD IY,VGUARDS R8EF5: LD A,(IY+0) CP 0FFh RET Z INC (IY+1) RES 2,(IY+1) LD A,(IY+2) ADD A,(IY+4) CP (IY+5) JR C,R8F17 ;$+0C CP (IY+6) JR NC,R8F17 ;$+07 LD (IY+2),A JR R8F1F ;$+0A R8F17: LD A,(IY+4) NEG LD (IY+4),A R8F1F: LD A,(IY+2) AND 7Fh RLCA LD E,A LD D,83h LD A,(DE) OR (IY+3) LD L,A INC DE LD A,(DE) LD H,A LD A,(IY+1) RRCA RRCA RRCA LD E,A LD D,81h LD C,1 CALL DRWFIX JP NZ,L8D06 LD A,(IY+2) AND 40h RLCA RLCA ADD A,5Ch LD H,A LD A,(IY+2) RLCA RLCA AND 0E0h OR (IY+3) LD L,A LD A,(IY+0) CALL C8E5F LD DE,7 ADD IY,DE JR R8EF5 ;$-6C PAINT_ITEMS: ;In JSW this is at 93D1h XOR A LD (PORTAL_CLOSED),A LD IY,ITEMS R8F6B: LD A,(IY+0) CP 0FFh JR Z,R8FBA ;$+4A OR A JR Z,R8FAE ;$+3B LD E,(IY+1) LD D,(IY+2) LD A,(DE) AND 7 CP 7 JR NZ,R8F8E ;$+0E LD HL,SCORBUF+3 CALL C90FE LD (IY+0),0 JR R8FAE ;$+22 R8F8E: LD A,(IY+0) AND 0F8h OR 3 LD B,A LD A,(IY+0) AND 3 ADD A,B LD (IY+0),A LD (DE),A LD (PORTAL_CLOSED),A LD D,(IY+3) LD HL,ITEM_GRAPHIC LD B,8 CALL C92D5 R8FAE: INC IY INC IY INC IY INC IY INC IY JR R8F6B ;$-4D R8FBA: LD A,(PORTAL_CLOSED) OR A RET NZ LD HL,PORTAL_ATTR SET 7,(HL) RET CHK_PORTAL: LD HL,(PORTAL_XY) LD A,(WILLY_POS) CP L JR NZ,R8FDF ;$+13 LD A,(WILLY_POS+1) CP H JR NZ,R8FDF ;$+0D LD A,(PORTAL_ATTR) BIT 7,A JR Z,R8FDF ;$+06 POP HL JP NXSHEET R8FDF: LD A,(PORTAL_ATTR) LD (HL),A INC HL LD (HL),A LD DE,31 ADD HL,DE LD (HL),A INC HL LD (HL),A LD DE,PORTAL_IMAGE LD HL,(PORTAL_XY+2) LD C,0 DRWFIX: LD B,10h ;Draw a sprite. JSW has this at 9456h. R8FF6: BIT 0,C LD A,(DE) JR Z,R8FFF ;$+06 AND (HL) RET NZ LD A,(DE) OR (HL) R8FFF: LD (HL),A INC L INC DE BIT 0,C LD A,(DE) JR Z,R900B ;$+06 AND (HL) RET NZ LD A,(DE) OR (HL) R900B: LD (HL),A DEC L INC H INC DE LD A,H AND 7 JR NZ,R9024 ;$+12 LD A,H SUB 8 LD H,A LD A,L ADD A,20h LD L,A AND 0E0h JR NZ,R9024 ;$+06 LD A,H ADD A,8 LD H,A R9024: DJNZ R8FF6 ;$-2E XOR A RET NXSHEET: LD A,(SHEET) INC A CP 20 JR NZ,R9091 ; ; Reached the end! ; LD A,(DEMO) OR A JP NZ,L9090 ;If in demo mode, wrap. LD A,(CHEAT) CP 7 JR Z,L9090 ;If in cheat mode, wrap. LD C,0 LD DE,MANDAT+96 ;Draw Willy at top of screen LD HL,SCREEN + 2*32 + 19 CALL DRWFIX LD DE,SP_SWFS ;SwordFish LD HL,SCREEN+ 5*32 +19 CALL DRWFIX LD HL,ATTR + 2*32 + 19 ;Set Willy attributes LD DE,31 LD (HL),2Fh INC HL LD (HL),2Fh ADD HL,DE LD (HL),27h INC HL LD (HL),27h ADD HL,DE INC HL ADD HL,DE LD (HL),45h INC HL LD (HL),45h ADD HL,DE LD (HL),46h INC HL LD (HL),47h ADD HL,DE LD (HL),0 INC HL LD (HL),0 LD BC,0 LD D,32h XOR A R907D: OUT (0FEh),A XOR 18h LD E,A LD A,C ADD A,D ADD A,D ADD A,D LD B,A LD A,E R9088: DJNZ R9088 ;$-00 DEC C JR NZ,R907D ;$-0E DEC D JR NZ,R907D ;$-11 L9090: XOR A R9091: LD (SHEET),A LD A,3Fh R9096: LD HL,ATTR LD DE,ATTR+1 LD BC,511 LD (HL),A LDIR LD BC,4 R90A5: DJNZ R90A5 ;$-00 DEC C JR NZ,R90A5 ;$-03 DEC A JR NZ,R9096 ;$-15 LD A,(DEMO) OR A JP NZ,NEWSHT R90B4: CALL AIR_DOWN ;Drain air and add to the bonus. JP Z,NEWSHT LD HL,SCORBUF+5 CALL C90FE LD IX,SCORBUF LD C,6 LD DE,SCREEN + 4096 + 3*32 + 26 CALL PMESS LD C,4 LD A,(AIR_MAJOR) CPL AND 3Fh RLC A LD D,A R90D7: LD A,0 OUT (0FEh),A LD B,D R90DC: DJNZ R90DC ;$-00 LD A,18h OUT (0FEh),A LD B,D R90E3: DJNZ R90E3 ;$-00 DEC C JR NZ,R90D7 ;$-0F JR R90B4 ;$-34 R90EA: LD (HL),30h DEC HL LD A,L CP 2Ah JR NZ,C90FE ;$+0E LD A,8 LD (B8458),A LD A,(NOMEN) INC A LD (NOMEN),A C90FE: LD A,(HL) CP 39h JR Z,R90EA ;$-17 INC (HL) RET C9105: LD HL,(CONVEY_POS) LD E,L LD D,H LD A,(CONVEY_LEN) LD B,A LD A,(CONVEY_DIR) OR A JR NZ,R9127 ;$+15 LD A,(HL) RLC A RLC A INC H INC H LD C,(HL) RRC C RRC C R9120: LD (DE),A LD (HL),C INC L INC E DJNZ R9120 ;$-04 RET R9127: LD A,(HL) RRC A RRC A INC H INC H LD C,(HL) RLC C RLC C JR R9120 ;$-13 KONG: LD HL,WK_ATTR+6 CALL C921B LD A,(B80DB) CP 2 RET Z LD A,(T7000 + 506h) CP 10h JP Z,L91F9 LD A,(T5E00+11*32+17) OR A JR Z,R9176 ;$+29 LD HL,T7000 + 0F71h R9152: LD A,(HL) OR A JR NZ,R916C ;$+18 DEC H LD A,H CP 77h JR NZ,R9152 ;$-08 LD A,(ELEM_AIR) LD (T5E00+11*32+17),A LD (T5E00+12*32+17),A LD A,72h ;Wall has opened. Change guardian's boundary. LD (HGUARDS+13),A JR R9176 ;$+0C R916C: LD (HL),0 LD L,91h LD A,H XOR 7 LD H,A LD (HL),0 R9176: LD HL,WK_ATTR+18 CALL C921B JR NZ,R919D ;$+21 XOR A LD (EUGHGT),A INC A LD (B80DB),A LD A,(ELEM_AIR) LD (BK_ATTR+2*32+15),A LD (BK_ATTR+2*32+16),A LD HL,T7000 + 2*32 + 15 LD B,8 R9194: LD (HL),0 INC L LD (HL),0 DEC L INC H DJNZ R9194 ;$-07 R919D: LD A,(B80DB) OR A JR Z,L91F9 ;$+58 LD A,(EUGHGT) CP 64h JR Z,R91F3 ;$+4B ADD A,4 LD (EUGHGT),A LD C,A LD D,10h LD A,(BORDER) ;Border R91B5: OUT (0FEh),A XOR 18h LD B,C R91BA: DJNZ R91BA ;$-00 DEC D JR NZ,R91B5 ;$-08 LD A,C RLCA LD E,A LD D,83h LD A,(DE) OR 0Fh LD L,A INC DE LD A,(DE) LD H,A LD D,81h LD A,(AIR_MINOR) AND 20h OR 40h LD E,A LD C,0 CALL DRWFIX LD HL,SCORBUF+3 CALL C90FE LD A,(EUGHGT) AND 78h LD L,A LD H,17h ADD HL,HL ADD HL,HL LD A,L OR 0Fh LD L,A LD A,6 JP C8E5F R91F3: LD A,2 LD (B80DB),A RET L91F9: LD A,(AIR_MINOR) AND 20h LD E,A LD D,81h LD HL,T6000+15 LD C,1 CALL DRWFIX JP NZ,L8D06 LD A,44h ;Kong colour: Bright green LD (WK_ATTR+1*32+15),A LD (WK_ATTR+1*32+16),A LD (WK_ATTR+15),A LD (WK_ATTR+16),A RET C921B: LD A,(WILLY_POS) INC A AND 0FEh CP L RET NZ LD A,(WILLY_POS+1) CP H RET NZ LD A,(ELEM_SWITCH+6) LD H,75h CP (HL) RET NZ LD (HL),8 INC H LD (HL),6 INC H LD (HL),6 XOR A OR A RET C923A: LD HL,(WILLY_POS) LD DE,31 LD C,0Fh CALL C925F INC HL CALL C925F ADD HL,DE CALL C925F INC HL CALL C925F LD A,(WILLY_Y) LD C,A ADD HL,DE CALL C925F INC HL CALL C925F JR R927F ;$+22 C925F: LD A,(ELEM_AIR) CP (HL) JR NZ,R9270 ;$+0D LD A,C AND 0Fh JR Z,R9270 ;$+08 LD A,(ELEM_AIR) OR 7 LD (HL),A R9270: LD A,(ELEM_FIRE1) CP (HL) JP Z,L8D05 LD A,(ELEM_FIRE2) CP (HL) JP Z,L8D05 RET R927F: LD A,(WILLY_Y) DEFB 0DDh LD H,83h ;LD XH,83h DEFB 0DDh LD L,A ;LD XL,A LD A,(WILLY_DIR) AND 1 RRCA LD E,A LD A,(WILLY_FRAME) AND 3 RRCA RRCA RRCA OR E LD E,A LD D,82h LD B,10h LD A,(WILLY_POS) AND 1Fh LD C,A R92A2: LD A,(IX+0) LD H,(IX+1) OR C LD L,A LD A,(DE) OR (HL) LD (HL),A INC HL INC DE LD A,(DE) OR (HL) LD (HL),A INC IX INC IX INC DE DJNZ R92A2 ;$-15 RET PMESS: LD A,(IX+0) CALL C92CB INC IX INC E LD A,D SUB 8 LD D,A DEC C JR NZ,PMESS ;$-0E RET C92CB: LD H,7 LD L,A SET 7,L ADD HL,HL ADD HL,HL ADD HL,HL LD B,8 C92D5: LD A,(HL) LD (DE),A INC HL INC D DJNZ C92D5 ;$-04 RET C92DC: LD A,(IY+0) CP 0FFh RET Z LD C,A LD B,0 XOR A LD D,(IY+1) LD A,D CALL C932B LD (HL),50h LD E,(IY+2) LD A,E CALL C932B LD (HL),28h R92F8: OUT (0FEh),A DEC D JR NZ,R9302 ;$+07 LD D,(IY+1) XOR 18h R9302: DEC E JR NZ,R930A ;$+07 LD E,(IY+2) XOR 18h R930A: DJNZ R92F8 ;$-12 DEC C JR NZ,R92F8 ;$-15 CALL C9337 RET NZ LD A,(IY+1) CALL C932B LD (HL),38h LD A,(IY+2) CALL C932B LD (HL),38h INC IY INC IY INC IY JR C92DC ;$-4D C932B: SUB 8 RRCA RRCA RRCA CPL OR 0E0h LD L,A LD H,59h RET C9337: LD A,(KEMP) OR A JR Z,R9342 ;$+07 IN A,(1Fh) BIT 4,A RET NZ R9342: LD BC,0BFFEh IN A,(C) AND 1 CP 1 RET ; ; A great tract of empty space, containing source code for the code from X8854 ;on. ; X934C: DEFS 2482 ; ; DEC E ; JR NZ,NOFLP6 ; LD E,(HL) ; XOR 24 ; NOFLP6 DJNZ TM51 ; DEC C ; JR NZ,TM51 ; NONOTE4 LD A,(DEMO) ; OR A ; JR Z,NODEM1 ; DEC A ; JP Z,MANDEAD ; LD (DEMO),A ; LD BC,0FEh ; IN A,(C) ; AND 31 ; CP 31 ; JP NZ,START ; LD A,(KEMP) ; OR A ; JR Z,NODEM1 ; IN A,(31) ; OR A ; JP NZ,START ; NODEM1 LD BC,0EFFEh ; IN A,(C) ; BIT 4,A ; JP NZ,CKCHEAT ; ; [JCE] Why use JPs here? JRs would do it nicely ; ; LD A,(CHEAT) ; CP 7 ; JP NZ,CKCHEAT ; LD B,0F7h ; IN A,(C) ; CPL ; AND 31 ; CP 20 ; JP NC,CKCHEAT ; LD (SHEET),A ; JP NEWSHT ; CKCHEAT LD A,(CHEAT) ; CP 7 ; JP Z,LOOP ; RLCA ; LD E,A ; LD D,0 ; LD IX,CHEATDT ; ADD IX,DE ; LD BC,0F7FEh ; IN A,(C) ; AND 31 ; CP (IX+0) ; JR Z,CKNXCHT ; CP 31 ; JP Z,LOOP ; CP (IX-2) ; JP Z,LOOP ; XOR A ; LD (CHEAT),A ; JP LOOP ; CKNXCHT LD B,0EFh ; IN A,(C) ; AND 31 ; CP (IX+1) ; JR Z,INCCHT ; CP 31 ; JP Z,LOOP ; CP (IX-1) ; JP Z,LOOP ; XOR A ; LD (CHEAT),A ; JP LOOP ; INCCHT LD A,(CHEAT) ; INC A ; LD (CHEAT),A ; JP LOOP ; MANDEAD LD A,(DEMO) ; OR A ; JP NZ,NXSHEET ; LD A,H ; LPDEAD1 LD HL,5800h ; LD DE,5801h ; LD BC,1FFFh ; LD (HL),A ; LDIR ; LD E,A ; CPL ; AND 7 ; RLCA ; RLCA ; RLCA ; OR 7 ; LD D,A ; LD C,E ; RRC C ; RRC C ; RRC C ; OR 16 ; XOR A ; TM21 OUT (254),A ; XOR 24 ; LD B,D ; TM22 DJNZ TM22 ; DEC C ; JR NZ,TM21 ; LD A,E ; DEC A ; CP 3Fh ; JR NZ,LPDEAD1 ; LD HL,NOMEN ; LD A,(HL) ; OR A ; JP Z,ENDGAM ; DEC (HL) ; JP NEWSHT ; ENDGAM LD HL,HGHSCOR ; LD DE,SCORBUF ; LD B,6 ; LPHGH LD A,(DE) ; CP (HL) ; JP C,FEET ; JP NZ,NEWHGH ; INC HL ; INC DE ; DJNZ LPHGH ; NEWHGH LD HL,SCORBUF ; LD HL,HGHSCOR ; LD BC,6 ; LDIR ; FEET LD HL,4000h ; LD DE,4001h ; LD BC,0FFFh ; LD (HL),0 ; LDIR ; XOR A ; LD (EUGHGT),A ; LD DE,MANDAT+64 ; LD HL,488Fh ; LD C,0 ; CALL DRWFIX ; LD DE,0B6E0h ; LD HL,48CFh ; LD C,0 ; CALL DRWFIX ; LOOPFT LD A,(EUGHGT) ; LD C,A ; LD B,83h ; LD A,(BC) ; OR 0Fh ; LD L,A ; INC BC ; LD A,(BC) ; SUB H ; LD H,A ; LD DE,0BAE0h ; LD C,0 ; CALL DRWFIX ; LD A,(EUGHGT) ; CPL ; LD E,A ; XOR A ; LD BC,40h ; TM111 OUT (254),A ; XOR 24 ; LD B,E ; TM112 DJNZ TM112 ; DEC C ; JR NZ,TM111 ; LD HL,5800h ; LD DE,5801h ; LD BC,1FFh ; LD A,(EUGHGT) ; AND 0Ch ; RLCA ; OR 47h ; LD (HL),A ; LDIR ; LD A,(EUGHGT) ; ADD A,4 ; LD (EUGHGT),A ; CP 0C4h ; JR NZ,LOOPFT ; LD IX,MESSG ; LD C,4 ; LD DE,40CAh ; CALL PMESS ; LD IX,MESSO ; LD C,4 ; LD DE,40D2h ; CALL PMESS ; LD BC,0 ; LD D,6 ; TM91 DJNZ TM91 ; LD A,C MEMTOP: DEFB 9,'A' ;The remains of "AND 7" ; ; - and at this point, the manuscript comes to an end ; TITLEMSG: DEFB '. . . . . .' DEFB ' . . . . . MANIC' DEFB ' MINER . . ' DEFB 7Fh DEFB ' BUG-BYTE ltd. 1983' DEFB ' . . By Matthew Smith' DEFB ' . . . Q to P = Left' DEFB ' & Right . . Bottom' DEFB ' row = Jump . . A' DEFB ' to G = Pause . .' DEFB ' H to L = Tune On/Off' DEFB ' . . . Guide Miner' DEFB ' Willy through 20' DEFB ' lethal caverns .' DEFB ' . . . . . ' DEFB ' . .' END ; ;(C) 1983,1984,1999,2000 Matthew Smith - all rights reserved ;