Prev: 800A Up: Map Next: 80D1
802C: Game Restart
Used by the routine at F33E.
Game_Restart 802C CALL CreateWindow Call CreateWindow.
802F CALL HallOfFame Call HallOfFame.
8032 CALL CreateWindow Call CreateWindow.
This entry point is used by the routine at GameInitialisation.
GameSelect_Loop 8035 CALL GameMenu Call GameMenu.
8038 LD A,$F7 Read from the keyboard;
Port Number Bit
0 1 2 3 4
F7 1 2 3 4 5
803A OUT ($FD),A
803C IN A,($FE)
803E CPL Flip the bits.
803F LD E,A E=A.
8040 LD A,($5E00) A=GameOptions.
8043 LD ($5E7C),A Write A to 5E7C.
Handle 1UP selection.
GameSelect_CheckP1 8046 BIT 0,E Has key "1" been pressed? ("1 PLAYER GAME").
8048 JR Z,GameSelect_CheckP2 If not jump to GameSelect_CheckP2.
804A RES 0,A Set player count = 1.
Handle 2UP selection.
GameSelect_CheckP2 804C BIT 1,E Has key "2" been pressed? ("2 PLAYER GAME").
804E JR Z,GameSelect_CheckKeyboard If not jump to GameSelect_CheckKeyboard.
8050 SET 0,A Set player count = 2.
Handle Keyboard selection.
GameSelect_CheckKeyboard 8052 BIT 2,E Has key "3" been pressed? ("3 KEYBOARD").
8054 JR Z,GameSelect_CheckKempston If not jump to GameSelect_CheckKempston.
8056 AND %11111001 Set control method = keyboard.
Handle Kempston Joystick selection.
GameSelect_CheckKempston 8058 BIT 3,E Has key "4" been pressed? ("4 KEMPSTON JOYSTICK").
805A JR Z,GameSelect_CheckCursor If not jump to GameSelect_CheckCursor.
805C AND %11111001 Strip out the control method bits.
805E OR %00000010 Set control method = kempston.
Handle Cursor Joystick selection.
GameSelect_CheckCursor 8060 BIT 4,E Has key "5" been pressed? ("5 CURSOR JOYSTICK").
8062 JR Z,GameSelect_StartGame If not jump to GameSelect_StartGame.
8064 AND %11111001 Strip out the control method bits.
8066 OR %00000100 Set control method = cursor.
Handle starting a new game.
GameSelect_StartGame 8068 LD ($5E00),A Store A at GameOptions.
806B LD A,$EF Read from the keyboard;
Port Number Bit
0 1 2 3 4
EF 0 9 8 7 6
806D OUT ($FD),A
806F IN A,($FE)
8071 CPL Flip the bits.
8072 BIT 4,A Has key "6" been pressed? ("6 START GAME").
8074 JP NZ,StartGame If so, jump to StartGame.
8077 LD A,($5E00) C=GameOptions.
807A LD C,A
807B LD A,($5E7C) A=5E7C.
807E XOR C
807F PUSH AF Stash AF on the stack.
8080 BIT 0,A
8082 CALL NZ,$80FD
8085 POP AF Restore AF from the stack.
8086 AND %00000110 Keep only bits 1-2.
8088 JR Z,Game_Restart_0
808A LD DE,$BA9E DE=BA9E.
808D LD A,C A=C.
808E AND %00000110 Keep only bits 1-2.
8090 LD L,A Create an offset in HL.
8091 LD H,$00
8093 ADD HL,DE HL=BA9E + offset.
8094 LD E,(HL) DE=address held at HL.
8095 INC HL
8096 LD D,(HL)
8097 CALL $B9BC Call B9BC.
Handle flashing each selection.
Game_Restart_0 809A LD HL,$810F HL=GameSelection_Attributes+01 (i.e. ignoring "Game Selection" as it doesn't flash).
809D LD A,($5E00) C=GameOptions.
80A0 LD C,A
80A1 BIT 0,C
80A3 JR NZ,Game_Restart_3
80A5 CALL MenuAttributeSetUnset
MenuAttrHandler 80A8 LD B,$03 B=03.
80AA LD A,C
80AB RRCA
MenuAttrHandler_Loop 80AC AND %00000011
80AE JR Z,Game_Restart_2
80B0 CALL MenuAttributeUnSetFirst
Game_Restart_1 80B3 DEC A
80B4 DJNZ MenuAttrHandler_Loop
80B6 JP GameSelect_Loop Jump to GameSelect_Loop.
Game_Restart_2 80B9 CALL MenuAttributeSetFirst Call MenuAttributeSetFirst.
80BC JR Game_Restart_1 Jump to Game_Restart_1.
Game_Restart_3 80BE CALL MenuAttributeUnsetSet Call MenuAttributeUnsetSet.
80C1 JR MenuAttrHandler Jump to MenuAttrHandler.
Set the first menu item, unset the second.
MenuAttributeSetUnset 80C3 SET 7,(HL) Set the FLASH attribute for the menu attribute.
80C5 INC HL Move onto the next menu attribute.
MenuAttributeUnSetFirst 80C6 RES 7,(HL) Unset the FLASH attribute for the menu attribute.
80C8 INC HL Move onto the next menu attribute.
80C9 RET Return.
Unset the first menu item, set the second.
MenuAttributeUnsetSet 80CA RES 7,(HL) Unset the FLASH attribute for the menu attribute.
80CC INC HL Move onto the next menu attribute.
MenuAttributeSetFirst 80CD SET 7,(HL) Set the FLASH attribute for the menu attribute.
80CF INC HL Move onto the next menu attribute.
80D0 RET Return.
Prev: 800A Up: Map Next: 80D1