| To install to HD:
| 1. Copy !KerBang to the HD
| 2. Replace the contents of !KerBang.!Run with:
|  ADFBootFloppy F1022001

IF "<Obey$Dir>"="@" THEN Set Obey$Dir ADFS::0.$.KerBang
Set KerBang$Dir <Obey$Dir>

IF ADFFS$OSVersion>=&35000 THEN ScreenSize 160K
IF ADFFS$OSVersion>=&35000 THEN WimpSlot -min 672K -max 672K ELSE WimpSlot -min 512K -max 512K
HideCommandWindow
IF ADFFS$CPUID>=&A10 THEN GOARM3JIT 0
IF ADFFS$OSVersion>=&35000 THEN ECHO <22><13>Loading...
ECHO <21>

| Decrypt game
LOAD <KerBang$Dir>.!RunImage CF00
MEMA D450 9498 94F4 >80000 7C3E007B 854709BA 8F5012C4 98591BCD A16324D6 AA6C2EDF B37537E8 BD7E4002

| Fix unpredictable use of PC in protection code
MEMA 81000 E3A0EC96 E28EE04C E88E0FFC E3A0EC95 E59EE0F0 E59ED008 E58F1060 E49DF004

KEY 0 LOMEM=&8045B:P%=&D464:[LDR R0,&D450:LDR R1,&D454:]:P%=&D474:[LDR R3,&D450:]:P%=&D498:[LDMFD R13!,{R0,R7}:MOV PC,R14:]:CALL &D460:*LOAD <KerBang$Dir>.GameCode C064|M
KEY 1 !&9604=&E1A00000:P%=&9644:[B &81000:]:A%=USR(&95F4):!&9604=&E33FF000:!&9644=&E8AF0FFC|M
KEY 2 P%=&81100:[STR R14,[R13,#-4]!:LDR R1,&81080:LDMIA R0!,{R2-R5,R8}:.C% LDR R6,[R2],#4:LDR R7,[R4],#4:EOR R6,R6,R7:STR R6,[R4,#-4]:CMP R2,R3:LDRGE R2,[R0,#-20]:CMP R4,R5:BLT C%:STMDB R0,{R0,R1}:MOV R4,#&9600:LDR R1,[R4,#&70]:]|M
KEY 3 [BIC R1,R1,#1<<28:STR R1,[R4,#&70]:LDR R4,[R0,#-12]:.D% LDR R6,[R2],#4:LDR R7,[R4],#4:EOR R6,R6,R7:STR R6,[R4,#-4]:CMP R2,R3:LDRGE R2,[R0,#-20]:CMP R4,R5:BLT D%:STMDB R0,{R0,R1}:STR R1,&81080:LDR PC,[R13],#4:]:A%=USR(&81100)|M
KEY 4 P%=&95F8:[LDR R1,&95F0:STR R13,[R1,#8]:MOV R0,R0:MOV R0,R0:]:P%=&9644:[B &81000:]:A%=USR(&95F4):!&95F8=&E51F0010:!&95FC=&E580D008:!&9600=&E28F0088:!&9604=&E33FF000:!&9644=&E8AF0FFC|M
KEY 5 P%=&81100:[STR 14,[13,#-4]!:LDR 1,&81080:LDMIA 0!,{2-5,8}:.C% LDR 6,[2],#4:LDR 7,[4],#4:ADD 6,6,7:STR 6,[4,#-4]:CMP 2,3:LDRGE 2,[0,#-20]:CMP 4,5:BLT C%:STMDB 0,{0,1}:STR 1,&81080:LDR PC,[13],#4:]:A%=&96F4:A%=USR(&81100)|M
KEY 6 P%=&81100:[STR R14,[R13,#-4]!:LDR R1,&81080:LDMIA R0!,{R2-R5,R8}:EOR R8,R8,R5:EOR R8,R8,R4:EOR R8,R8,R3:STMDB R0,{R2-R5,R8}:SUB R0,R0,#&14:EOR R4,R4,R3:LDR PC,[R13],#4:]:A%=USR(&81100)|M
KEY 7 P%=&81100:[STR R14,[R13,#-4]!:MOV R0,#&9900:ADD R0,R0,#&38:MOV R1,#&80000:MOV R6,R1:MOV R2,R1:ADD R3,R1,#&20:.C% LDR R4,[R0]:LDR R5,[R2],#4:EOR R4,R4,R5:STR R4,[R0],#4:CMP R2,R3:]|M
KEY 8 [MOVEQ R2,R6:CMP R0,R1:BNE C%:LDR PC,[R13],#4:]:CALL &81100:QUIT|M

FX 225,1
FX 21,0
FX 138,0,128
FX 138,0,129
FX 138,0,130
FX 138,0,131
FX 138,0,132
FX 138,0,133
FX 138,0,132
FX 138,0,134
FX 138,0,135
FX 138,0,136
BASIC -load <KerBang$Dir>.!RunImage
UnSet Key$*

MEMA 44268 "Kerbang" >9770 E1A00000 E1A00000 >9A30 EF000011
GO 99F8
MEMA 8000 E59F0008 E3A01807 E5810370 EA01A091 EAFE5F2A >4411C EAFF0FB7 >8020 E50FE00C EF000011
GO 43FF8

| Fix direct IOC access for key presses and mouse movement
MEMA 34D98 E3A00010 >34DA4 EF00001F >34E1C E3A00010 >34E28 EF000020 >34E40 E3300004 0AFFFF24 E330000B 11A0F00E E92D4000 EBFFFF78 E8BD8000 >34DB0 E3A01004 EF000006
MEMA 34E30 E3A0000D E3A01004 EF000006 >34EA0 E92D400F EB013069 >34EB4 E1A01000 E04112A0 E0811420 E0410520 >34EEC E8BD800F >34EF4 E8BD400F >34F0C E8BD400F
| Use OS_Mouse
MEMA 81050 E92D4070 E1A0400F E3846003 E336F000 E1A00000 E1A0500E EF02001C E1A0E005 E334F000 E1A00000 E8BD8070

| Call Mouse code from VSync handler
MEMA 34B4C EB0000D3 E1A00000

| Don't claim VSync device vector
MEMA 34AA4 E1A00000 >34ABC E1A00000

| Prevent IRQ changes
MEMA 34D44 E1A00000 >34D6C E1A00000 >34A14 E1A0F00E >34A4C E1A0F00E >34FD8 E1A00000 >352B4 E1A00000 >35724 E1A00000 >34A30 E1A00000 >34A38 E1A00000 >34A70 E1A00000 >34A80 E1A00000

| Prevent code elevation
IF ADFFS$OSVersion>=&35000 THEN MEMA 34DF0 E1A00000 >34DFC E8FD8000

| Expand screen in main memory, then copy to screen
IF ADFFS$OSVersion>=&35000 THEN MEMA 34554 E3A02809 >34574 EA0132A9 >81020 E58FE024 EB003BF5 EBFE2C80 E3A01809 E3A02905 E59C30F4 E4910004 E4830004 E2522004 1AFFFFFB E51FF004

| Fix illegal instructions
MEMA C068 E28F1D07 E8911FFC >14D1C E8BD007F

| Prevent the code being continually encrypted/decrypted
MEMA 6C8B8 E1A0F00E

IF ADFFS$OSVersion>=&35000 THEN ScreenSize 160
Set Key$0 OLD|M360a%=USR(&C064)|M

| Avoid use of Wimp under JIT
IF ADFFS$OSVersion>=&35000 THEN Set Key$0 <Key$0>100GOTO350|M520GOTO580|M590PROCenter_game_environment|M2630MODE0:REPORT:PRINT" at line ";ERL:END|M2920pls%=1|M2980A%=1|M2990B%=1|M3100QUIT|M
Set Key$0 <Key$0>RUN|F|M
FX 21,0
FX 138,0,128
IF ADFFS$OSVersion>=&35000 THEN FX 200 3
ADFJoystickMouse J1 50% S=B1 M=B2 A=B3
BASIC
ADFJoystickMouse
IF ADFFS$OSVersion>=&35000 THEN FX 200 0
IF ADFFS$CPUID>=&A10 THEN GOARM3JIT
UnSet KerBang$Dir