; Rommel's Revenge ][ ; Sunday 07:24:22 pm 24/02/85 ; AType EQU #1000 BType EQU #1001 CType EQU #1002 DType EQU #1003 EType EQU #1004 KeyTab EQU #1005 ShiftKey EQU #101A CtrlKey EQU #101C CapsKey EQU #104B KeyCodes EQU #1055 UDKdesc EQU #10F5 iUDKTab EQU #117C UDKTab EQU #11F0 ; ORG #1260 ; pcPall DEFW 0 pCurY DEFW 0 pCurX DEFW 0 ppCurY DEFB 0 ; jPrint JP Print jPrintStr JP PrintStr jSetMode1 JP SetMode1 jSetMode2 JP SetMode2 jIntRout JP Ret DEFS 3 ; Data End EQU $ ; Screen EQU #C000 ; ULA EQU #7F00 ; Border EQU #10 ; PIOa EQU #F400 PIOb EQU #F500 PIOc EQU #F600 PIOk EQU #F700 ; IntVector EQU #38 ; Del EQU #8 Cls EQU #C Cret EQU #D Clr EQU #18 ; wChars EQU #700 pChars EQU #300 ; ColA EQU 2 ColB EQU 3 ColC EQU 4 Blank EQU 1 ; HSTimeOut EQU #4000 FlashRate EQU #140 ; HighScores EQU #800 ; RepSpeed1 EQU 100 RepSpeed2 EQU 13 CurFR EQU 80 UDKfr EQU 180 ; BigMap EQU #8400 ; Game EQU #3800 ; Compiler etc ; Q ORG #1800 ; Start ENT ; DI LD SP,#C000 CALL SetUp6845 ; LD BC,ULA!#10 OUT (C),C LD BC,ULA!#54 OUT (C),C ; LD A,R ;* not random ! LD A,3 AND #3 ADD A,A ADD A,#08 LD H,A LD L,0 LD DE,#800 LD BC,#200 LDIR ; LD HL,InitOV LD DE,AType LD BC,5 LDIR ; CALL SetUpKeys ; LD HL,Ret LD (jIntRout+1),HL ; LD HL,iUDKTab LD DE,UDKTab LD BC,7*16 LDIR ; CALL SetMode1 ; LD HL,MainPall LD (pcPall),HL LD (pPall),HL ; CALL InitInt ; Lurk LD BC,PIOb IN A,(C) BIT 0,A JR Z Lurk ; EI ; DispMain LD HL,MainPall LD (pcPall),HL LD HL,sMainMenu CALL PrintStr ; LD HL,HSTimeOut ; MainLoop LD BC,#7C10 CALL ScanOptionKeys LD DE,MainVecTab JP C VecGoto DEC HL LD A,H OR L JR NZ MainLoop ; DispHS LD HL,0 LD (Score),HL ; DispHS1 XOR A LD (EntryF),A LD HL,HighPall LD (pcPall),HL LD HL,sHighA CALL PrintStr ; LD IX,HighScores LD A,"1" DHSlp CALL PrintHS INC A CP #3A JR NZ DHS1 ADD A,#41-#3A DHS1 CP "H" JR NZ DHSlp LD A,(EntryF) OR A JP NZ AcceptEnt LD HL,sHighB CALL PrintStr ; HSw LD BC,#0030 CALL ScanOptionKeys JR NC HSw CP 10 JP Z DispMain JP DispGame ; SetUp6845 LD HL,VideoData LD DE,38*256+30 LD B,#F5 IN A,(C) BIT 4,A JR NZ SUb LD DE,31*256+27 SUb LD C,0 SUlp LD B,#BC OUT (C),C LD B,#BD LD A,(HL) CP #42 JR NZ SUc LD A,D LD D,E SUc OUT (C),A INC HL INC C LD A,C CP #F JR NZ SUlp RET ; VideoData DEFB 63 DEFB 40 DEFB 46 DEFB #8E DEFB #42 DEFB 0 DEFB 25 DEFB #42 DEFB 0 DEFB 7 DEFB 0,0 DEFB #30 DEFB 0 DEFW 0 ; PrintHS PUSH AF LD (HSChar),A LD HL,sHighC CALL PrintStr PUSH IX POP HL LD A,(EntryF) OR A JR NZ PHSb PHSa LD A,(HL) OR A INC HL JR NZ PHSa LD A,(HL) INC HL LD H,(HL) LD L,A LD DE,(Score) OR A SBC HL,DE JR NC PHSb LD A,1 LD (EntryF),A LD HL,(pCurY) LD (EntryY),HL LD (pInsert),IX EX DE,HL JR PHSx ; PHSb LD A,(IX) OR A INC IX JR Z PHS2a CALL Print JR PHSb ; PHS2a LD L,(IX) INC IX LD H,(IX) INC IX LD (pHSEnd),IX PHSx LD DE,280 LD (pCurX),DE LD A,ColA CALL Print CALL PrintScore LD A,"0" CALL Print LD A,Cret CALL Print POP AF Ret RET ; PHS2 INC IX PHS3 CALL PrintSp DJNZ PHS3 JR PHS2a ; PrintSp PUSH AF LD A," " CALL Print POP AF RET ; Printsp PUSH AF LD A,#80 CALL Print POP AF RET ; PrintScore1 LD C,#80 LD B,4 JR PS0 PrintScore LD C,0 LD B,4 PS0 CALL PS1 ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL DJNZ PS0 RET ; PS1 LD A,H RRCA RRCA RRCA RRCA AND #0F JR Z PS1a INC C OR #30 JP Print ; PS1a LD A,C CP #80 RET Z AND #7F JR Z PrintSp LD A,#30 JP Print ; PrintPlans LD C,0 LD B,4 PP0 CALL PP1 ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL DJNZ PP0 RET ; PP1 LD A,H RRCA RRCA RRCA RRCA AND #0F JR Z PP1a INC C OR #30 JP Print ; PP1a LD A,C OR A RET Z LD A,"0" JP Print ; AcceptEnt LD HL,sAccept CALL PrintStr LD HL,(EntryY) LD (pCurY),HL LD HL,24 LD (pCurX),HL LD IX,HSBuffer LD A,ColB CALL Print AElp CALL ReadKey OR A JR Z AElp CP Cret JR Z AEcr CP Del JR Z AEdel CP Clr JR Z AEclr CP 5 JR C AE1 CP #18 JR C AElp AE1 LD E,A LD D,wChars/256 LD A,(DE) LD C,A LD B,0 LD HL,(pCurX) ADD HL,BC LD BC,275 OR A SBC HL,BC JR NC AElp PUSH IX POP HL LD BC,HSBuffer OR A SBC HL,BC LD BC,130 OR A SBC HL,BC JR NC AElp LD A,E LD (IX),A INC IX CALL Print JR AElp ; AEcr PUSH IX POP HL CALL MWEntry LD (HL),0 INC HL LD A,(Score) LD (HL),A INC HL LD A,(Score+1) LD (HL),A INC HL LD DE,HSBuffer OR A SBC HL,DE LD B,H LD C,L PUSH BC LD HL,(pHSEnd) LD DE,(pInsert) OR A SBC HL,DE PUSH HL LD HL,(pHSEnd) ADD HL,BC EX DE,HL LD HL,(pHSEnd) POP BC INC BC LDDR LD HL,HSBuffer LD DE,(pInsert) POP BC LDIR JP DispHS ; AEdel CALL AEcdel JP AElp ; AEclr CALL AEcdel JR NZ AEclr JP AElp ; AEcdel LD DE,HSBuffer PUSH IX POP HL OR A SBC HL,DE ADD HL,DE RET Z DEC HL LD A,(HL) CP 5 JR C DelCC PUSH HL LD L,A LD B,A LD H,wChars/256 LD E,(HL) LD D,0 LD HL,(pCurX) OR A SBC HL,DE LD (pCurX),HL LD A,B CALL Print LD (pCurX),HL POP IX OR A RET DelCC LD DE,HSBuffer LD C,ColB DCC1 OR A SBC HL,DE ADD HL,DE JR Z DCC2 LD A,(DE) CP 5 JR NC DCC3 LD C,A DCC3 INC DE JR DCC1 DCC2 LD A,C CALL Print PUSH HL POP IX OR A RET ; MWEntry LD DE,HSBuffer OR A SBC HL,DE JR NZ MWE1 LD A,0 nSomeone EQU $-1 INC A LD (nSomeone),A CP #10 LD BC,43 JR NC MWEa CP 5 LD BC,8 JR C MWEa LD BC,13 MWEa LD HL,Someone LD DE,HSBuffer LDIR EX DE,HL RET ; Someone DEFB ColC:DEFM /Someone else/ DEFM / ( who shall remain nameless )***/ ; MWE1 XOR A LD (nSomeone),A LD A,L ADD HL,DE CP 125 JR C MWE2 LD HL,TooLong LD DE,HSBuffer LD BC,25 LDIR EX DE,HL RET ; TooLong DEFB ColC:DEFM /Boring game ? Hate It ! / ; MWE2 LD IX,Clues LD IY,Text LD (HL),0 PUSH HL MWElp PUSH IX LD HL,HSBuffer Mlp1 LD A,(HL) OR A JR Z Mlpf CP #21 INC HL JR C Mlp1 CALL ConvLC CP (IX) INC IX JR Z Mlp1 DEC IX Mlpf LD A,(IX) OR A POP IX JR Z MWEcg StepIX LD A,(IX) INC IX OR A JR NZ StepIX StepIY LD A,(IY) INC IY OR A JR NZ StepIY LD A,(IX) INC A JR NZ MWElp POP HL RET ; ConvLC CP "Z"+1 RET NC CP "A" RET C ADD A,"a"-"A" RET ; MWEcg PUSH IY POP DE POP AF LD HL,HSBuffer LD (HL),ColC INC HL CGlp LD A,(DE) OR A RET Z LD (HL),A INC HL INC DE JR CGlp ; DispKeys LD HL,KeysPall LD (pcPall),HL LD HL,sKeysMenu CALL PrintStr ; LD A,ColC CALL Print ; LD HL,UDKTab LD IY,Screen+160 LD B,7 UDKa PUSH BC LD (pCurY),IY LD BC,100 LD (pCurX),BC CALL UDKlist LD BC,2*80 ADD IY,BC LD A,L OR #0F LD L,A INC HL POP BC DJNZ UDKa ; UDKw LD BC,#7FA0 CALL ScanOptionKeys JR NC UDKw CP 8 JP NC DispMain DEC A LD L,A LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL LD E,L LD D,H ADD HL,HL PUSH HL ; ADD HL,DE ;*24 LD E,L LD D,H ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,DE ADD HL,DE LD BC,Screen+160 ADD HL,BC LD (pKeyVDU),HL LD (pCurY),HL LD HL,100 LD (pCurX),HL POP HL LD DE,UDKTab ADD HL,DE LD (pKeyTab),HL ; LD B,#10 UDKcl LD (HL),#FF INC HL DJNZ UDKcl ; LD HL,(pKeyVDU) PUSH HL CALL GrabLine ; POP HL LD DE,24 ADD HL,DE PUSH HL CALL ClearLine POP HL LD DE,80 ADD HL,DE CALL ClearLine ; UDKwa1 LD E,30 UDKwa2 LD C,#40 UDKwait LD B,PIOc/256 OUT (C),C LD B,PIOa/256 IN A,(C) INC A JR NZ UDKwa1 INC C LD A,C CP #4A JR NZ UDKwait DEC E JR NZ UDKwa2 ; CALL SetUpKeyMap ; LD IX,(pKeyTab) ; XOR A LD (CurType),A ; LD HL,1 ; UDKlp CALL FlashLine CALL UDKscan JR Z UDKlp CP #43 ;Esc JR Z UDKend DEC A LD B,A LD A,IXL CPL AND #F JR Z UDKlp LD A,ColC CALL Print LD A,B LD (IX),A INC IX CALL UDKchar CALL Printsp CALL UDKclip JR UDKlp ; UDKend CALL FLrep PUSH IX POP HL LD DE,(pKeyTab) OR A SBC HL,DE JP NZ UDKw LD L,E LD H,D LD BC,iUDKTab-UDKTab ADD HL,BC LD BC,16 LDIR LD HL,(pKeyTab) CALL UDKlist JP UDKw ; UDKscan LD IY,KeyTab LD DE,#0100 LD C,#40 UDKSa LD B,PIOc/256 OUT (C),C LD B,PIOa/256 IN A,(C) LD B,8 UDKSb RRA JR C UDKSc BIT 7,(IY) JR Z UDKSc INC E:DEC E JR NZ UDKSc LD E,D RES 7,(IY) UDKSc INC D INC IY DJNZ UDKSb INC C LD A,C CP #4A JR NZ UDKSa LD A,E OR A RET ; SetUpKeyMap LD HL,KeyTab LD B,80 SUKM SET 7,(HL) INC HL DJNZ SUKM RET ; FlashLine DEC HL LD A,H OR L RET NZ LD A,(CurType) XOR #01 LD (CurType),A JR Z FL0 FLrep LD HL,LineBuffer LD DE,(pKeyVDU) LD B,8 FL1 PUSH BC LD BC,22 LDIR EX DE,HL LD BC,#800-22 ADD HL,BC EX DE,HL LD BC,50-22 ADD HL,BC POP BC DJNZ FL1 FL3 LD HL,UDKfr RET ; FL0 LD HL,(pKeyVDU) LD B,8 FL2 PUSH BC LD E,L LD D,H INC DE LD (HL),0 LD BC,22 LDIR LD BC,#800-22 ADD HL,BC POP BC DJNZ FL2 JR FL3 ; UDKlist LD A,(HL) BIT 7,(HL) RET NZ LD A,ColC CALL Print LD A,(HL) CALL UDKchar CALL Printsp LD A,L CPL AND #F RET Z CALL UDKclip INC HL JR UDKlist ; UDKclip PUSH HL LD HL,(pCurX) LD BC,280 OR A SBC HL,BC JR C NOver LD HL,(pCurY) LD BC,80 ADD HL,BC LD (pCurY),HL LD HL,100 LD (pCurX),HL NOver POP HL RET ; UDKchar PUSH HL LD HL,UDKdesc INC A UDKp DEC A JR Z UDKp1 UDKp2 BIT 7,(HL) INC HL JR NZ UDKp2 JR UDKp UDKp1 LD A,(HL) AND #7F CALL Print BIT 7,(HL) INC HL JR NZ UDKp1 POP HL RET ; DispAdv LD A,(#188) CP #F3 JP NZ DispMain DI JP #188 ; DispOpti LD HL,OptiPall LD HL,OptiPall LD (pcPall),HL LD HL,sOptiMenu CALL PrintStr OptiLoop LD BC,#7CA0 CALL ScanOptionKeys JR NC OptiLoop CP 8 JP Z DispMain CP 10 JP Z DispMain DEC A ADD A,A ADD A,A ADD A,A ADD A,A LD E,A LD D,0 LD IX,OptiData ADD IX,DE LD L,(IX) LD H,(IX+1) LD (pcPall),HL ; LD L,(IX+2) LD H,(IX+3) CALL PrintStr ; ; OptiLpA LD A,(IX+4) CALL CalcpVDU LD (FlashpDisp),HL CALL GrabLine ; LD D,0 ; OptiLpB LD HL,FlashRate ; OptiLp1 LD B,(IX+5) LD C,#E0 CALL ScanOptionKeys JR C OptiKP ; DEC HL LD A,L OR H JR NZ OptiLp1 ; LD A,D CPL LD D,A OR A ; PUSH DE LD HL,(FlashpDisp) PUSH AF CALL Z PutLine POP AF CALL NZ ClearLine POP DE ; JR OptiLpB ; OptiKP CP (IX+4) JR Z OptiLp1 ; PUSH AF LD HL,(FlashpDisp) CALL PutLine POP AF ; CP 8 JP Z DispMain CP 9 JP NC DispOpti ; LD (IX+4),A ; PUSH IX POP HL ADD A,5 LD E,A LD D,0 ADD HL,DE LD A,(HL) LD L,(IX+11) LD H,(IX+12) LD (HL),A JR OptiLpA ; GrabLine LD A,8 LD DE,LineBuffer GLlp PUSH HL LD BC,50 LDIR POP HL LD BC,#0800 ADD HL,BC DEC A JR NZ GLlp RET ; PutLine LD A,8 EX DE,HL LD HL,LineBuffer PLlp PUSH DE LD BC,50 LDIR POP DE LD BC,#0800 EX DE,HL ADD HL,BC EX DE,HL DEC A JR NZ PLlp RET ; ClearLine LD A,8 CLlp PUSH HL LD E,L LD D,H INC DE LD (HL),0 LD BC,49 LDIR POP HL LD BC,#800 ADD HL,BC DEC A JR NZ CLlp RET ; DispInst LD HL,OptiPall LD (pcPall),HL LD HL,sInsts CALL PrintStr ; DIlp LD BC,#0030 CALL ScanOptionKeys JR NC DIlp ; LD HL,sSuggest CALL PrintStr ; DIlp1 LD BC,#0030 CALL ScanOptionKeys JR NC DIlp1 ; JP DispMain ; DispGame LD A,Cls CALL Print CALL SetMode2 CALL Game LD (Score),HL PUSH AF CALL InitInt CALL SetMode1 LD HL,EndPall LD (pcPall),HL POP AF OR A JR Z DG0 DEC A JR Z DG1 LD HL,sDG2 CALL PrintStr JR DGp ; DG0 LD HL,sDG0 CALL PrintStr JR DGp ; DG1 LD HL,sDG1 CALL PrintStr JR DGp ; DGp LD HL,(Score) CALL PrintScore1 LD HL,sDG3 CALL PrintStr ; DGwait LD BC,#FFF0 CALL ScanOptionKeys JR NC DGwait JP DispHS1 ; SetMode1 LD A,#8D LD (TopHalfMode),A RET ; SetMode2 LD A,#8C LD (TopHalfMode),A RET ; VecGoto DEC A ADD A,A LD L,A LD H,0 ADD HL,DE LD A,(HL) INC HL LD H,(HL) LD L,A JP (HL) ; MainVecTab DEFW DispGame ; 1 DEFW DispInst ; 2 DEFW DispKeys ; 3 DEFW DispOpti ; 4 DEFW DispAdv ; 5 DEFW DispMain ; 6 DEFW DispMain ; 7 DEFW DispMain ; 8 DEFW DispMain ; 9 DEFW DispMain ; 10 DEFW DispHS ; 11 ; OptiVecTab DEFW DispGame DEFW DispInst DEFW DispKeys DEFW DispAdv DEFW DispOpti DEFW DispMain ; OptiData DEFW OptiPall,sGameVariants DEFB 1 DEFB #78 DEFB 0,1,2,3,#FF DEFW AType DEFS 3 ; DEFW OptiPall,sSkillLevels DEFB 2 DEFB #7C DEFB 0,#20,#60,#80,#B0 DEFW BType DEFS 3 ; DEFW OptiPall,sMountains DEFB 2 DEFB #60 DEFB 0,1,0,0,0 DEFW CType DEFS 3 ; DEFW OptiPall,sSoundTypes DEFB 3 DEFB #7C DEFB #00,#0E,#0F,#1D,#1F DEFW DType DEFS 3 ; DEFW OptiPall,sVolcano DEFB 3 DEFB #78 DEFB 30,15,5,0,0 DEFW EType ; InitOV DEFB #20,#0F,#01,#03,5 ; CalcpVDU LD HL,LineTab DEC A ADD A,A LD E,A LD D,0 ADD HL,DE LD A,(HL) INC HL LD H,(HL) LD L,A RET ; LineTab DEFW Screen + 5 * 80 DEFW Screen + 7 * 80 DEFW Screen + 11* 80 DEFW Screen + 13* 80 DEFW Screen + 18* 80 DEFW Screen + 7 * 80 DEFW Screen + 8 * 80 DEFW Screen + 9 * 80 DEFW Screen + 10* 80 ; ReadKey PUSH IX PUSH HL PUSH DE PUSH BC PUSH AF EX AF,AF' PUSH AF CALL ReadKeys DEC A LD B,A XOR A LD HL,ShiftKey BIT 7,(HL) JR Z Shifta LD A,80 Shifta ADD A,B LD E,A LD D,0 LD HL,KeyCodes ADD HL,DE LD A,(CtrlKey) RRCA AND #40 LD B,A POP AF EX AF,AF' POP AF LD A,(HL) XOR B POP BC POP DE POP HL POP IX RET ; ReadKeys LD A,1 LD (CurSpeed),A LD (CurType),A ReadKeyLp CALL CursorInv CALL ScanKeys JR NZ RKNewKey LD A,(CurrKey) OR A JR Z ReadKeyLp LD HL,(CurrKeyAddr) BIT 7,(HL) JR Z RKCancelOld LD HL,(RepDel) DEC HL LD (RepDel),HL LD A,L OR H JR NZ ReadKeyLp LD HL,RepSpeed2 RK1 LD (RepDel),HL RKExit CALL CursorOff LD A,(CurrKey) RET ; RKNewKey LD (CurrKey),A LD HL,RepSpeed1 LD (CurrKeyAddr),IX JR RK1 ; RKCancelOld XOR A LD (CurrKey),A JR ReadKeyLp ; ScanKeys LD HL,KeyTab LD DE,#0100 LD C,#40 ScanK1 CALL ReadKeyRow LD B,8 ScanK2 RRA CALL NC SKPressed CALL C SKNotPressed INC HL INC D DJNZ ScanK2 INC C LD A,C CP #4A JR NZ ScanK1 LD A,E OR A RET ; SKPressed EX AF,AF' LD A,(HL) AND #3F CP 3 JR Z SKP1 INC (HL) EX AF,AF' RET SKP1 BIT 6,(HL) JR NZ SKexit1 BIT 7,(HL) JR NZ SKexit LD A,E OR A JR NZ SKexit PUSH HL POP IX LD E,D SKexit1 SET 7,(HL) SKexit EX AF,AF' RET ; SKNotPressed EX AF,AF' LD A,(HL) AND #3F JR Z SKNP1 DEC (HL) EX AF,AF' RET SKNP1 RES 7,(HL) EX AF,AF' RET ; ReadKeyRow LD B,PIOc/256 OUT (C),C LD B,PIOa/256 IN A,(C) RET ; CursorOff LD A,(CurType) OR A RET NZ JR FlipCur ; CursorInv LD A,(CurSpeed) DEC A LD (CurSpeed),A RET NZ LD A,CurFR LD (CurSpeed),A LD A,(CurType) XOR #01 LD (CurType),A FlipCur LD L,#5F JP pOutChar ; CurTab DEFB #FF,#CC,#00,0 DEFB #77,#EE,#00,0 DEFB #33,#FF,#00,0 DEFB #11,#FF,#88,0 ; ScanOptionKeys PUSH IX PUSH DE PUSH BC CALL SOK POP BC POP DE POP IX RET ; SOK LD IX,OptKeyTab LD E,12 SOKlp RL C:RL B JR C SOK0 PUSH BC LD BC,8 ADD IX,BC POP BC SOKx DEC E JR NZ SOKlp OR A RET ; SOK0 CALL SOK1 RET C CALL SOK1 RET C JR SOKx ; SOK1 PUSH BC LD B,PIOc/256 LD C,(IX) OUT (C),C LD BC,PIOa IN A,(C) AND (IX+1) JR NZ SOKnp LD A,(IX+2) AND #0F CP 4 JR Z SOK2 INC (IX+2) SOKxf LD BC,4 ADD IX,BC OR A POP BC RET ; SOK2 BIT 7,(IX+2) JR NZ SOKxf SET 7,(IX+2) LD A,(IX+3) LD BC,4 ADD IX,BC SCF POP BC RET ; SOKnp LD A,(IX+2) AND #0F JR Z SOKxf DEC (IX+2) DEC A AND #0F JR NZ SOKxf RES 7,(IX+2) JR SOKxf ; SetUpKeys LD BC,PIOk ! #82 OUT (C),C LD BC,PIOa ! #07 OUT (C),C LD BC,PIOc ! #C0 OUT (C),C XOR A OUT (C),A LD BC,PIOa ! #BF OUT (C),C LD BC,PIOc ! #80 OUT (C),C OUT (C),A LD BC,PIOa ! #0E OUT (C),C LD BC,PIOc ! #C0 OUT (C),C OUT (C),A LD BC,PIOk ! #92 OUT (C),C LD BC,PIOc ! #40 OUT (C),C RET ; WaitTP LD BC,#F9FF IN A,(C) BIT 1,A JR NZ WaitTP RET ; Print PUSH IX PUSH HL PUSH DE PUSH BC PUSH AF CP Cls JR Z Pcls CP Cret JR Z Pcret CP 5 JR C Pcol LD H,wChars/256 LD L,A CALL pOutChar LD E,(HL) LD D,0 LD HL,(pCurX) ADD HL,DE LD (pCurX),HL pExit POP AF POP BC POP DE POP HL POP IX RET ; Pcol LD B,0 DEC A JR Z Pc1 LD B,#F0 DEC A JR Z Pc1 LD B,#0F DEC A JR Z Pc1 LD B,#FF Pc1 LD A,B LD (ColourMask),A JR pExit ; Pcret CALL DoCR JR pExit ; Pcls LD HL,#C000 LD (pCurY),HL LD DE,#C001 LD BC,#3FFF LD (HL),0 LDIR XOR A LD (pCurX),A LD (pCurX+1),A LD (ppCurY),A JR pExit ; DoCR LD DE,0 LD (pCurX),DE LD A,(ppCurY) INC A LD (ppCurY),A AND #1F PUSH HL LD L,A LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL ; * 8 ADD HL,HL ; (*8)*2 LD E,L LD D,H ADD HL,HL ADD HL,HL ; (*8)*8 ADD HL,DE ; (*8)*10 ie *80 LD DE,#C000 ADD HL,DE LD (pCurY),HL POP HL RET ; pOutChar BIT 7,L RET NZ PUSH HL LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL LD DE,pChars ADD HL,DE PUSH HL POP IX LD DE,(pCurX) LD A,E SRL D:RR E SRL D:RR E LD HL,(pCurY) ADD HL,DE EX DE,HL AND #03 LD (nShifts),A LD B,8 OutCharLp LD A,(IX) AND #F0 LD H,A RRCA RRCA RRCA RRCA OR H LD H,A LD A,(IX) AND #0F LD L,A RRCA RRCA RRCA RRCA OR L LD L,A LD C,0 ; LD A,(ColourMask) AND H LD H,A LD A,(ColourMask) AND L LD L,A ; LD A,0 nShifts EQU $-1 OR A JR Z OCL1 PUSH DE LD D,A OCL2 LD A,0 RLCA RLCA RLCA RLCA LD E,H RR H RES 3,H RRCA AND #08 OR H LD H,A ; LD A,E RLCA RLCA RLCA RLCA LD E,L RR L RES 3,L RRCA AND #08 OR L LD L,A ; LD A,E RLCA RLCA RLCA RLCA LD E,C RR C RES 3,C RRCA AND #08 OR C LD C,A ; DEC D JR NZ OCL2 POP DE OCL1 LD A,(DE) XOR H LD (DE),A INC DE LD A,(DE) XOR L LD (DE),A INC DE LD A,(DE) XOR C LD (DE),A DEC DE DEC DE INC IX LD A,D ADD A,8 LD D,A DJNZ OutCharLp POP HL RET ; PrintStr LD A,(HL) OR A RET Z CALL Print INC HL JR PrintStr ; sMainMenu DEFB Cls,#86,#86,#85 DEFB ColA DEFM /Rommel's Revenge ][/ DEFB Cret,Cret DEFB Cret,Cret DEFB Cret DEFB ColA DEFM / 1 / DEFB ColB DEFM /Play the game/ DEFB Cret,Cret DEFB ColA DEFM / 2 / DEFB ColC DEFM /Read the instructions/ DEFB Cret,Cret,Cret,Cret DEFB ColA DEFM / 3 / DEFB ColB DEFM /Select the playing keys/ DEFM / and joystick/ DEFB Cret,Cret DEFB ColA DEFM / 4 / DEFB ColC DEFM /Change the game options/ DEFB Cret DEFB Cret,Cret,Cret,Cret DEFB ColA DEFM / 5 / DEFB ColB DEFM /Return to Para-Sys/ ;* DEFB Cret,Cret,Cret,Cret DEFB ColC DEFM /Design by Simon Brattel ./ DEFB Cret,Cret DEFB ColA DEFM /(c) / DEFB ColB DEFM /Design Design / DEFB ColC DEFM /Software/ DEFB 0 ; sAppol DEFB Cls,#86,#86,#86 DEFB ColA DEFM /Please read this !/ DEFB ColB DEFB Cret,Cret,Cret DEFM / I apologise for the / DEFM /incompleteness of this programme/ DEFB Cret,Cret DEFM /but I have had to despatch/ DEFM / one early in order to meet/ DEFB Cret,Cret DEFM /this deadline - I suspect / DEFM /that by the time you read this/ DEFB Cret,Cret DEFM /the programme has probably / DEFM /been finished !/ DEFB Cret,Cret,Cret DEFM / The only major omissions from/ DEFM / this are the sounds , and/ DEFB Cret,Cret DEFM /the game options - both of which/ DEFM / will be included in the/ DEFB Cret,Cret DEFM /finished product , behaving similarly DEFM / to those in Dark Star./ DEFB Cret,Cret,Cret DEFM / We trust this will not impair your/ DEFM / judgement as we/ DEFB Cret,Cret DEFM /believe this game will stand on/ DEFM / its graphical merit alone ./ DEFB Cret,Cret DEFB ColA DEFM /Press SPACE to continue ./ DEFB 0 MainPall DEFB #54,#4B,#57,#5F DEFB #54,#4B,#53,#57 ;1&2 DEFB #54,#4B,#42,#49 ;3&4 DEFB #54,#4B,#4C,#4E ;5 DEFB #54,#50,#5F,#57 DEFB #54,#54,#54,#54 ; sKeysMenu DEFB Cls DEFB #86,#86,#85 DEFB ColA DEFM /Present Controls/ DEFB Cret,Cret DEFB ColA DEFM / 1 / DEFB ColB DEFM /Turn left/ DEFB Cret,Cret DEFB ColA DEFM / 2 / DEFB ColB DEFM /Turn right/ DEFB Cret,Cret DEFB ColA DEFM / 3 / DEFB ColB DEFM /Forwards/ DEFB Cret,Cret DEFB ColA DEFM / 4 / DEFB ColB DEFM /Backwards/ DEFB Cret,Cret DEFB ColA DEFM / 5 / DEFB ColB DEFM /Fire shell/ DEFB Cret,Cret DEFB ColA DEFM / 6 / DEFB ColB DEFM /Fire missile/ DEFB Cret,Cret DEFB ColA DEFM / 7 / DEFB ColB DEFM /Pause/ DEFB Cret,Cret DEFB ColA DEFM / 8 / DEFB ColA DEFM /Return to main menu ./ DEFB Cret,Cret DEFB ColC DEFM /Press a number between / DEFB ColA DEFM /'1'/ DEFB ColC DEFM / and / DEFB ColA DEFM /'6'/ DEFB ColC DEFM / to select the control/ DEFB Cret DEFM /that you wish to change , then/ DEFM / type all the keys that/ DEFB Cret DEFM /you want for that control ./ DEFB Cret DEFB ColC DEFM /When you have finished press / DEFB ColA DEFM /'ESC'/ DEFB ColC DEFM / which then allows you/ DEFB Cret DEFM /to edit another control , or to/ DEFM / leave by pressing / DEFB ColA DEFM /'8'/ DEFB Cret,Cret DEFB ColC DEFM /Keyboard := Yellow / DEFB ColA DEFM /Numeric Pad := White / DEFB ColB DEFM /Joystick := Blue/ DEFB 0 ; KeysPall DEFB #54,#4B,#57,#4A DEFB #54,#4B,#57,#4A DEFB #54,#4B,#57,#4A DEFB #54,#4B,#57,#5F DEFB #54,#4B,#57,#4A DEFB #54,#4B,#57,#4A DEFB #54,#54,#54,#54 DEFB #54,#54,#54,#54 ; sSoundTypes DEFB Cls DEFB #86,#86,#86,#82 DEFB ColA DEFM /Sound Types/ DEFB Cret,Cret,Cret,Cret DEFB Cret DEFB ColA DEFM / 1 / DEFB ColB DEFM /Only explosions/ DEFB Cret,Cret DEFB ColA DEFM / 2 / DEFB ColC DEFM /Silent running/ DEFB Cret,Cret,Cret,Cret DEFB ColA DEFM / 3 / DEFB ColB DEFM /All sounds except your engines/ DEFB Cret,Cret DEFB ColA DEFM / 4 / DEFB ColC DEFM /All sounds except hyperspace/ DEFB Cret,Cret,Cret,Cret DEFB Cret DEFB ColA DEFM / 5 / DEFB ColB DEFM /Full sound/ DEFB Cret,Cret,Cret,Cret DEFB ColA DEFM / 8 / DEFB ColC DEFM /Return to main menu/ DEFB ColA DEFB Cret,Cret DEFM / 9 / DEFB ColC DEFM /Return to options menu/ DEFB 0 ; sMountains DEFB Cls DEFB #86,#86,#85 DEFB ColA DEFM /Mountain Types/ DEFB Cret,Cret,Cret,Cret DEFB Cret DEFB ColA DEFM / 1 / DEFB ColB DEFM /" None At All "/ DEFB Cret,Cret DEFB ColA DEFM / 2 / DEFB ColC DEFM /" Lots Of Them "/ DEFB Cret,Cret,Cret,Cret DEFB Cret,Cret DEFB Cret,Cret,Cret,Cret DEFM / - There will be more options here/ DEFB Cret DEFB Cret,Cret,Cret,Cret DEFB ColA DEFM / 8 / DEFB ColC DEFM /Return to main menu/ DEFB ColA DEFB Cret,Cret DEFM / 9 / DEFB ColC DEFM /Return to options menu/ DEFB 0 ; sSkillLevels DEFB Cls DEFB #86,#86,#86,#82 DEFB ColA DEFM /Skill Levels/ DEFB Cret,Cret,Cret,Cret DEFB Cret DEFB ColA DEFM / 1 / DEFB ColB DEFM /Easy/ DEFB Cret,Cret DEFB ColA DEFM / 2 / DEFB ColC DEFM /Normal/ DEFB Cret,Cret,Cret,Cret DEFB ColA DEFM / 3 / DEFB ColB DEFM /Nasty/ DEFB Cret,Cret DEFB ColA DEFM / 4 / DEFB ColC DEFM /Very nasty/ DEFB Cret,Cret,Cret,Cret DEFB Cret DEFB ColA DEFM / 5 / DEFB ColB DEFM /Pretty damn devastating !/ DEFB Cret,Cret,Cret,Cret DEFB ColA DEFM / 8 / DEFB ColC DEFM /Return to main menu/ DEFB ColA DEFB Cret,Cret DEFM / 9 / DEFB ColC DEFM /Return to options menu/ DEFB 0 ; sVolcano DEFB Cls DEFB #86,#86,#86,#83 DEFB ColA DEFM /Volcano Type/ DEFB Cret,Cret,Cret,Cret DEFB Cret DEFB ColA DEFM / 1 / DEFB ColB DEFM /Super-Dooper 3D Turbo Megacano/ DEFB Cret,Cret DEFB ColA DEFM / 2 / DEFB ColC DEFM /Hyper-Active/ DEFB Cret,Cret,Cret,Cret DEFB ColA DEFM / 3 / DEFB ColB DEFM /Active/ DEFB Cret,Cret DEFB ColA DEFM / 4 / DEFB ColC DEFM /Dormant/ DEFB Cret,Cret,Cret,Cret DEFB ColC DEFM / Sorry about entry number one/ DEFM / - got a bit carried away !/ DEFB Cret DEFB Cret,Cret,Cret,Cret DEFB ColA DEFM / 8 / DEFB ColB DEFM /Give up completely/ DEFB ColA DEFB Cret,Cret DEFM / 9 / DEFB ColC DEFM /Give up/ DEFB 0 ; sGameVariants DEFB Cls DEFB #86,#86,#86,#82 DEFB ColA DEFM /Game Variants/ DEFB Cret,Cret,Cret,Cret DEFB Cret DEFB ColA DEFM / 1 / DEFB ColB DEFM /Normal game/ DEFB Cret,Cret DEFB ColA DEFM / 2 / DEFB ColC DEFB ColB DEFM /Fewer objects/ DEFB Cret,Cret,Cret,Cret DEFB ColA DEFM / 3 / DEFB ColB DEFM /Simple ' shoot 'em up ' game/ DEFB Cret,Cret DEFB ColA DEFM / 4 / DEFB ColC DEFM /Brattelzone / DEFB ColB DEFM /" Hate It ! "/ DEFB Cret,Cret,ColB DEFB Cret,Cret DEFB Cret,Cret,Cret,Cret DEFB Cret DEFB ColA DEFM / 8 / DEFB ColB DEFM /Return to main menu/ DEFB ColA DEFB Cret,Cret DEFM / 9 / DEFB ColC DEFM /Return to options menu/ DEFB 0 ; sOptiMenu DEFB Cls DEFB #86,#86,#86,#82 DEFB ColA DEFM /Game Options/ DEFB Cret,Cret,Cret,Cret DEFB Cret DEFB ColA DEFM / 1 / DEFB ColB DEFM /Change Game Format/ DEFB Cret,Cret DEFB ColA DEFM / 2 / DEFB ColC DEFM /Change Skill Factors/ DEFB Cret,Cret,Cret,Cret DEFB Cret DEFB ColA DEFM / 3 / DEFB ColB DEFM /Change Mountains/ DEFB Cret,Cret DEFB ColA DEFM / 4 / DEFB ColC DEFM /Change Sound Effects/ DEFB Cret,Cret,Cret,Cret DEFB Cret DEFB ColA DEFM / 5 / DEFB ColB DEFM /Change Volcano/ DEFB Cret,Cret,Cret,Cret DEFB Cret DEFB ColA DEFM / 8 / DEFB ColB DEFM /Return to main menu ./ DEFB 0 ; OptiPall DEFB #54,#4B,#57,#5F DEFB #54,#4B,#53,#57 ;1&2 DEFB #54,#4B,#42,#49 ;3&4 DEFB #54,#4B,#4C,#4E ;5 DEFB #54,#4B,#5F,#57 DEFB #54,#54,#54,#54 DEFB #54,#54,#54,#54 ; sInsts DEFB Cls DEFB #86,#86,#86,#82 DEFB ColA DEFM /Instructions/ DEFB Cret,Cret,Cret DEFB ColB DEFM /Shoot the enemy tanks to survive/ DEFB Cret,Cret DEFB ColB DEFM /the more you shoot , the faster / DEFM /the remainder get !/ DEFB Cret,Cret,Cret,Cret DEFB ColC DEFM /Destroy the crystals to escape !/ DEFB Cret,Cret,Cret,Cret DEFB Cret,Cret DEFB ColA DEFM /Coming soon !/ DEFB ColB DEFM / The follow-up to/ DEFB ColC DEFM / Rommel's Revenge/ DEFB Cret,Cret,ColC DEFM $The Tank-Busting Game$ DEFM $ / 'Oh what a dull name'$ DEFB Cret,Cret,Cret,Cret DEFB Cret DEFB ColB DEFM /oh - while you're at it . . ./ DEFM / read the inlay !/ DEFB Cret,Cret DEFM /Depress / DEFB ColC DEFM /SPACE/ DEFB ColB DEFM / to continue ./ NOP ; sSuggest DEFB Cls DEFB #86,#86,#86,#82 DEFB ColA DEFM /Suggestions/ DEFB Cret,Cret,Cret DEFB ColB DEFM / The perspective works to the full/ DEFM / in a dark room with/ DEFB Cret,Cret DEFB ColC DEFM /the player sitting about four/ DEFM / feet away from the display ./ DEFB Cret,Cret,Cret DEFB ColB DEFM / The sound effects are produced in/ DEFM / stereo and can be/ DEFB Cret,Cret DEFM /played through a stereo system ./ DEFB Cret,Cret DEFB Cret DEFB ColC DEFM / We actually recommend joysticks/ DEFM / ! ( Yeeaah ! )/ DEFB Cret,Cret DEFB Cret,Cret,Cret,Cret DEFB ColB DEFM /" Tell me - do you get on well/ DEFM / with other programmers ? "/ DEFB Cret,Cret DEFB ColC DEFM /" Hate them "/ DEFB Cret,Cret,Cret DEFB ColB DEFM /Depress de / DEFB ColC DEFM /SPACE/ DEFB ColB DEFM / mon !/ DEFB 0 sHighA DEFB Cls DEFB #86,#86,#85 DEFB ColA DEFM /Rommel's Revenge ][/ DEFB Cret,Cret DEFB #86,#86,#86,#82 DEFB ColB DEFM /Hall of Fame/ DEFB Cret,Cret,Cret DEFB 0 ; sHighB DEFB Cret,Cret,Cret DEFB #85 DEFB ColB DEFM /Press / DEFB ColC DEFM /SPACE/ DEFB ColB DEFM / to play or / DEFB ColC DEFM /ENTER/ DEFB ColB DEFM / for options ./ DEFB 0 ; sHighC DEFB ColA DEFM / / HSChar DEFM /1 / DEFB ColB DEFB 0 ; sAccept DEFB Cret,Cret,Cret DEFB #85 DEFB ColA DEFM /Please type in your entry ./ DEFB 0 ; sDG0 DEFB Cret,Cret DEFB Cret,Cret DEFB Cret,Cret DEFB ColB DEFM /Well Done !/ DEFB Cret,Cret DEFB ColC DEFM /You destroyed all the objects/ DEFM / and scored / DEFB ColA NOP ; sDG1 DEFB Cret,Cret DEFB Cret,Cret DEFB Cret,Cret DEFB ColB DEFM /Shame !/ DEFB Cret,Cret DEFB ColC DEFM /You gave up after scoring / DEFB ColA NOP ; sDG2 DEFB Cret,Cret DEFB Cret,Cret DEFB Cret,Cret DEFB ColB DEFM /Bad Luck !/ DEFB Cret,Cret DEFB ColC DEFM /You were killed while scoring / DEFB ColA NOP ; sDG3 DEFB ColA DEFM /0 / DEFB ColC DEFM /points ./ DEFB Cret,Cret,Cret DEFB Cret,Cret,Cret DEFB Cret,Cret,Cret DEFB Cret,Cret,Cret DEFB Cret,Cret,Cret DEFB Cret DEFM /Press any key to continue ./ NOP ; HighPall DEFB #54,#4B,#5B,#5F DEFB #54,#4B,#4A,#5F DEFB #54,#4B,#4A,#5F DEFB #54,#4B,#4A,#5F DEFB #54,#4E,#5F,#57 DEFB #54,#54,#54,#54 ; ; EndPall DEFB #54,#4B,#57,#5F DEFB #54,#4B,#4A,#5F ;1&2 DEFB #54,#4B,#42,#49 ;3&4 DEFB #54,#4B,#4C,#4E ;5 DEFB #54,#50,#5F,#57 DEFB #54,#54,#54,#54 ; InitInt LD HL,IntVector LD (HL),#C3 INC HL LD (HL),IntRout & #FF INC HL LD (HL),IntRout / 256 IM 1 RET ; IntRout PUSH HL PUSH DE PUSH BC PUSH AF LD BC,PIOb IN A,(C) BIT 0,A JR Z IRa ; CALL jIntRout ; XOR A LD (nInters),A ; LD B,ULA/256 LD C,#8D TopHalfMode EQU $-1 OUT (C),C ; LD HL,(pcPall) ; JR IRx IRa LD A,(nInters) INC A LD (nInters),A CP 5 JR NZ IRb LD BC,ULA!#8D OUT (C),C IRb LD HL,(pPall) LD BC,ULA XOR A OUT (C),A LD E,(HL) OUT (C),E INC HL INC A ; OUT (C),A LD E,(HL) OUT (C),E INC HL INC A ; OUT (C),A LD E,(HL) OUT (C),E INC HL INC A ; OUT (C),A LD E,(HL) OUT (C),E INC HL ; IRx LD (pPall),HL POP AF POP BC POP DE POP HL EI RETI ; OptKeyTab DEFB #48,#04,#84,0 ; Esc DEFB #40,#00,#84,0 ;Dummy ; DEFB #48,#01,#84,1 ; "1" DEFB #41,#20,#84,1 ; DEFB #48,#02,#84,2 ; "2" DEFB #41,#40,#84,2 ; DEFB #47,#02,#84,3 ; "3" DEFB #40,#20,#84,3 ; DEFB #47,#01,#84,4 ; "4" DEFB #42,#10,#84,4 ; DEFB #46,#02,#84,5 ; "5" DEFB #41,#10,#84,5 ; DEFB #46,#01,#84,6 ; "6" DEFB #40,#10,#84,6 ; DEFB #45,#02,#84,7 ; "7" DEFB #41,#04,#84,7 ; DEFB #45,#01,#84,8 ; "8" DEFB #41,#08,#84,8 ; DEFB #44,#02,#84,9 ; "9" DEFB #40,#08,#84,9 ; DEFB #42,#04,#84,10; Cret DEFB #40,#40,#84,10 ; DEFB #45,#80,#84,11; " " DEFB #45,#00,#84,0 ; Dummy ; ; Clues DEFM /version/:NOP DEFM /sex/:NOP DEFM /fuckoff/:NOP DEFM /fuck/:NOP DEFM /shit/:NOP DEFM /help/:NOP DEFM /designdesign/:NOP DEFM /starstrike/:NOP DEFM /pinback/:NOP DEFM /cheeseburger/:NOP DEFM /darkstar/:NOP DEFM /msl/:NOP DEFM /m.lee/:NOP DEFM /m.s.lee/:NOP DEFB #FF Text DEFM $Wednesday 03:05:49 am 16/01/85$:NOP DEFM /It's more fun than writing this !/ DEFB 0 DEFM /Fuck off yourself !/:NOP DEFM /Oh yes please !/:NOP DEFM /Shit somewhere else !/:NOP DEFM /Help ?/:NOP DEFM /What a what a silly silly name !/:NOP DEFM /SlugStruck/:NOP DEFM /Want yer mouse ?/:NOP DEFM /What would you have called it ?/:NOP DEFM /" Hate it ! "/:NOP DEFM /The name's Lee . . James Bond !/:NOP DEFM /The name's Lee . . James Bond !/:NOP DEFM /The name's Lee . . James Bond !/:NOP DEFB #FF ; Colour DEFB 0 ; ColourMask DEFB #FF ; pPall DEFW MainPall ; FlashpDisp DEFW #C000 LineBuffer DEFS 80*8 ; EntryF DEFB 0 Score DEFW 0 pInsert DEFW 0 pHSEnd DEFW 0 EntryY DEFW 0 ; CurrKeyAddr DEFW 0 CurrKey DEFB 0 CurSpeed DEFB 0 CurType DEFB 0 RepDel DEFW 0 ; HSBuffer DEFS 131 ; pKeyVDU DEFW 0 pKeyTab DEFW 0 ; nInters DEFB 0