マルチカートリッジに対応し、PAC PAC BIRDにも対応しました!ローダー(loaderv1.z80)をAILZ80ASMでアセンブルします。アセンブルされたバイナリ(loaderv1.bin)をSUPER VISION 8000用ROMと結合してPC-6001用ROM(sv8000v1.rom)を作ります。
>AILZ80ASM.exe loaderv1.z80 -f
>copy /b loaderv1.bin+missilevader.bin+pacpacbird.bin+beamgalaxian.bin sv8000v1.rom
ローダーは[SPC][1][2][3][4]で操作します。ゲームはジョイパッドで遊びます。



loaderv1.z80
org $4000
.header
db 41h
db 42h
db 04h
db 40h
Attr:
di
ld hl, c000h
ld de, c001h
ld bc, 01ffh
ld (hl), 20h
ldir
Screen:
ld hl, c200h
ld de, c201h
ld bc, 180fh
ld (hl), ffh
ldir
ld hl, 5000h
ld (80fah), hl
ld a, (5023h)
Game1:
cp c3h
jr nz, Game5
ld hl, Game1Patch
dec hl
ld (80fch), hl
ld hl, missilevader
jr Title
Game5:
cp 31h
jr nz, Game7
ld hl, Game5Patch
dec hl
ld (80fch), hl
ld hl, pacpacbird
jr Title
Game7:
ld hl, Game7Patch
dec hl
ld (80fch), hl
ld hl, beamgalaxian
Title:
ld de, c200h
ld bc, 18
ldir
ld hl, color1
ld de, c240h
ld bc, 18
ldir
ld hl, color2
ld de, c280h
ld bc, 18
ldir
ld hl, color3
ld de, c2c0h
ld bc, 18
ldir
ld hl, color4
ld de, c300h
ld bc, 18
ldir
Vram:
ld a, 01h
out (b0h), a
Ram:
ld a, 66h
out (06h), a
ld a, 0dh
out (f0h), a
out (f2h), a
ld a, 40h
out (30h), a
ld a, 11h
out (33h), a
Rom:
ld hl, (80fah)
ld de, 0000h
ld bc, 1000h
ldir
Vector:
ld a, fah
ld i, a
Patch:
ld hl, (80fch)
Next:
inc hl
ld a, (hl)
inc hl
ld c, (hl)
inc c
Addr:
dec c
jr z, Value
inc hl
ld d, (hl)
inc hl
ld e, (hl)
ld (de), a
jr Addr
Value:
cp ffh
jr nz, Next
Select:
ld hl, c000h
ld de, c001h
Mode:
ei
ld a, (80f0h)
cp ffH
jr nz, Keys
jr Mode
Keys:
ld b, 84h
cp 31h
jr z, Run
ld b, 86h
cp 32h
jr z, Run
ld b, dch
cp 33h
jr z, Run
ld b, deh
cp 34h
jr z, Run
ld b, 20h
cp 20h
jr nz, Mode
ld a, (80fbh)
add a, 10h
cp 80h
jr nz, Reset
ld a, 50h
Reset:
ld h, a
ld l, 23h
ld (80fbh), a
ld a, (hl)
jp Game1
Run:
ld (hl), b
ld a, (hl)
ld (8400h), a
ld bc, 01ffh
ldir
ld hl, 0000h
ld (8000h), hl
jp $0000
Key:
org $4200
push af
call SubCPU
ld (80f0h), a
pop af
ei
reti
SubCPU:
ld a, 0ch
out (93h), a
Scan:
in a,(92h)
and 20h
jr z, Scan
ld a, 0dh
out (93h), a
in a, (90h)
ret
org $4220
Left:
ld a, (80f6h)
bit 5, a
jr z, Right
ld a, 44h
ret
Right:
bit 4,a
jr z, None
ld a, 88h
ret
None:
ld a, 00h
ret
Start:
org $4240
ld (8031h) ,a
ld a, 00h
out (b0h), a
ret
GameOver:
org $4260
ld a, 01h
out (b0h), a
ei
jp $039a
Counter:
org $4270
di
push af
ld a, (80feh)
add a, 20h
ld (80feh), a
cp 00h
jp z, $0038
ld a, 08h
out (93h), a
Wait:
in a, (92h)
and 80h
jr z, Wait
ld a, 09h
out (93h), a
ld a, 06h
out (90h), a
pop af
ei
reti
JoyS:
ld a, 01h
rrca
rrca
or %10000000
push bc
ld b, a
ld a, 07h
out (a0h), a
in a, (a2h)
ld c, a
or %10000000
and %10111111
out (a1h), a
ld a, 0fh
out (a0h), a
ld a, b
out (a1h), a
ld a, 0eh
out (a0h), a
in a, (a2h)
cpl
ld b, a
ld a, 07h
out (a0h), a
ld a, c
out (a1h), a
ld a, b
JoyB:
bit 5, a
jr z, JoyR
ld a, 80h
ld (80f8h), a
JoyR:
ld a, b
bit 3, a
jr z, JoyU
ld a, 10h
jr JoyE
JoyU:
ld a, b
bit 0, a
jr z, JoyD
ld a, 40h
jr JoyE
JoyD:
ld a, b
bit 1, a
jr z, JoyL
ld a, 80h
jr JoyE
JoyL:
bit 2,a
jr z, JoyN
ld a, 20h
jr JoyE
JoyN:
ld a, 00h
JoyE:
ld (80f6h), a
pop bc
ret
Shot1:
org $4300
push af
call JoyS
pop af
cp eeh
jr nz, Pad2
ld a, (80f8h)
cp 80h
jr nz, Pad1
ld a, ffh
ld (80f0h), a
ld (80f8h), a
ld a, 11h
ret
Pad1:
ld a,(80f0h)
cp 31h
jr nz, Pad0
ld a, 08h
ret
Pad2:
cp ddh
jr nz, Pad3
ld a, (80f0h)
cp 32h
jr nz, Pad0
ld a, 08h
ret
Pad3:
ld a, (80f0h)
cp 0dh
jr nz, Pad0
ld a, ffh
ld (80f0h), a
ld a, 01h
ret
Pad0:
ld a, 00h
ret
org $4369
Reverse:
ld a, (de)
and %01111111
ld (hl), a
ld a, h
and %11111101
ld h, a
ld (hl), 21h
ld a, h
or %00000010
ld h, a
inc hl
inc de
dec c
jr nz, Reverse
di
ret
org $4380
ld a, 20h
call $43ea
ei
jp $05a8
org $4390
ld a, 20h
call $43ea
ld a, ffh
ld (80f0h), a
jp $01da
org $43a0
ld a, (80f0h)
SpcK:
cp 20h
jr nz, RetK
ld a,ffh
ld (80f0h), a
ld a,00h
ld (8010h), a
ld a, 2ah
ret
RetK:
cp 0dh
jr nz, OthK
ld a, ffh
ld (80f0h), a
ld a, 23h
ret
OthK:
cp ffh
ret z
ld b, a
ld a, ffh
ld (80f0h), a
ld a, b
ld (8010h), a
ret
org $43e7
ld a, (8400h)
Init:
push de
push bc
ld hl, c000h
ld de, c001h
ld bc, 01ffh
ld (hl), a
ldir
pop bc
pop de
ld hl, c2fah
ret
org $4400
ld a, ffh
ld (80f0h), a
StartMode:
ld a, (80f0h)
cp ffH
jr nz, ModeNum
jr StartMode
ModeNum:
cp 30h
jr z, RetNum
cp 31h
jr z, RetNum
cp 32h
jr z, RetNum
cp 33h
jr z, RetNum
jp $4400
RetNum:
sub 30h
ret
org $4430
call JoyS
ld a, (80f6h)
bit 4, a
jp nz, $0c17
bit 5,a
jp nz, $0c5f
ret
org $4441
call $01c9
call $43e7
ret
org $4450
call JoyS
ld a, (80f8h)
ld b, a
ld a, 00h
ld (80f8h), a
ld a, b
bit 7, a
jp nz, $044f
ret
org $4470
ld hl, $0731
rst 20h
ld a, 00h
out (b0h), a
ret
org $4480
or c0h
cp cdh
jr c, Ok
add a, 20h
Ok:
add a, 02h
ld h, a
ret
org $4490
push de
push bc
ld hl, c200h
ld de, c201h
ld bc, 0d1fh
ld (hl), 00h
ldir
pop bc
pop de
ret
org $44b0
ld a, (80f2h)
cp 00h
jr z,JLL
bit 4, a
jr z,RRR
ld a, 00h
ld (80f2h), a
ld a, 80h
ret
RRR:
bit 5, a
jr z, UUU
ld a, 00h
ld (80f2h), a
ld a, 40h
ret
UUU:
bit 2, a
jr z, DDD
ld a, 00h
ld (80f2h), a
ld a, 10h
ret
DDD:
bit 3, a
jr z, NNN
ld a, 00h
ld (80f2h), a
ld a, 20h
ret
NNN:
cp 80h
jr nz, JLL
ret
GameKey:
org $44f0
push af
call SubCPU
ld b, a
ld a, (80f2h)
or b
ld (80f2h), a
pop af
ei
reti
org $4508
ld a, (80f2h)
bit 7, a
jr z, GKEY
ld a, 00h
ld (80f2h), a
ld (8003h), a
ld a, 10h
ret
GKEY:
call Joys
ld a, (80f8h)
bit 7, a
jr z, GNN
ld a, 00h
ld (80f8h), a
ld a, 01h
ret
GNN:
ld a, 00h
ret
org $4530
JLL:
call Joys
cp 00h
ret z
bit 4, a
jr z, JRR
ld a, 00h
ld (80f6h), a
ld a, 08h
ret
JRR:
bit 5, a
jr z, JUU
ld a, 00h
ld (80f6h), a
ld a, 04h
ret
JUU:
bit 6, a
jr z, JDD
ld a, 00h
ld (80f6h), a
ld a, 01h
ret
JDD:
bit 7, a
jr z, NON
ld a, 00h
ld (80f6h), a
ld a, 02h
ret
NON:
ld a, 00h
ret
missilevader: db 'MISSILEVADER:
pacpacbird: db 'PAC PAC BIRD:
beamgalaxian: db 'BEAMGALAXIAN:
color1: db '128x96 4COLORS
color2: db '128x96 4COLORS
color3: db '256x192 GW MONO
color4: db '256x192 BW MONO
Game1Patch:
db 00h,02h,fah,02h,00h,79h
db 08h,01h,fah,04h
db 30h,01h,01h,0eh
db 42h,03h,fah,03h,fah,05h,fah,07h
db 43h,03h,00h,a5h,00h,e9h,00h,49h
db 44h,04h,01h,0fh,01h,2dh,00h,7ah,fah,17h
db 50h,01h,01h,2ch
db 70h,01h,fah,06h
db 80h,01h,00h,48h
db a0h,19h,00h,5dh,00h,afh,04h,6bh,04h,73h,04h,7bh,04h,83h,04h,8bh
db 07h,e5h,09h,26h,09h,2eh,09h,4eh,09h,56h,09h,5dh,09h,cch,09h,fbh
db 0ah,85h,0ah,99h,0ch,cch,0dh,adh,0eh,2ah,0eh,40h,0eh,48h,0eh,50h
db 0eh,58h,0eh,adh
db a1h,19h,00h,61h,00h,b3h,04h,6fh,04h,77h,04h,7fh
db 04h,87h,04h,8eh,07h,e8h,09h,2ah,09h,32h,09h,52h,09h,59h,09h,61h
db 09h,cfh,09h,ffh,0ah,88h,0ah,9dh,0ch,d0h,0dh,b0h,0eh,2fh,0eh,44h
db 0eh,4ch,0eh,54h,0eh,5bh,0eh,b0h
db c2h,07h,00h,69h,00h,72h,05h,b3h,05h,c1h,05h,cch,00h,91h,07h,8ah
db c3h,05h,00h,a0h,0ah,13h,0ah,07h,0dh,dfh,0bh,8bh
db c4h,01h,07h,86h
db c5h,01h,05h,f2h
db c6h,03h,03h,31h,05h,e8h,05h,e5h
db cah,02h,03h,46h,03h,46h
db cbh,01h,06h,ffh
db cch,0ch,00h,f4h,00h,fah,01h,00h,0ch,ddh,0bh,c4h,0dh,46h,0dh,14h,0dh,4fh,0dh,52h,0dh,7dh,0ch,e6h,0ch,e9h
db cdh,0dh,04h,1ah,0dh,17h,0dh,80h,0dh,c5h,04h,38h,02h,a2h,00h,e7h,02h,a2h,02h,a5h,02h,a5h,06h,fah,07h,30h,0ah,46h
db ceh,06h,01h,d8h,01h,edh,02h,02h,0ah,4bh,0ah,5ch,0bh,d8h
db e7h,01h,00h,e8h
db f0h,01h,fah,16h
db fbh,01h,00h,00h
db ffh,01h,80h,f0h
Game5Patch:
db 00h,0bh,00h,05h,00h,06h,00h,07h,00h,77h,00h,78h,01h,49h,01h,4ah,01h,4bh,01h,4ch,00h,39h,fah,02h
db 01h,01h,00h,01h
db 08h,02h,03h,96h,fah,04h
db 3eh,01h,00h,00h
db 41h,01h,01h,21h
db 42h,03h,fah,03h,fah,05h,fah,07h
db 43h,02h,00h,2dh,00h,e8h
db 44h,04h,01h,22h,01h,4bh,fah,17h,03h,85h
db 45h,01h,03h,97h
db 70h,02h,01h,4ah,fah,06h
db 90h,01h,00h,2ch
db a0h,10h,00h,e7h,00h,15h,01h,ceh,01h,d5h,06h,6bh,06h,82h,06h,c9h,06h,d1h,06h,d8h,06h,dfh,06h,e7h,06h,efh,06h,f7h,06h,ffh,07h,07h,07h,0fh
db a1h,0fh,00h,19h,01h,d1h,01h,d9h,06h,6fh,06h,86h,06h,cdh,06h,d4h,06h,dbh,06h,e3h,06h,ebh,06h,f3h,06h,fbh,07h,03h,07h,0bh,07h,13h
db b0h,02h,00h,03h,03h,84h
db c2h,0ch,01h,dch,01h,2fh,01h,35h,01h,42h,01h,84h,06h,29h,01h,c0h,00h,7eh,00h,85h,00h,8ch,04h,27h,04h,87h
db c3h,05h,00h,93h,00h,9ah,00h,a1h,00h,b2h,00h,deh
db c7h,01h,01h,99h
db cch,02h,06h,3ah,06h,43h
db cdh,07h,04h,2dh,04h,8dh,03h,83h,03h,95h,00h,e6h,06h,1bh,01h,49h
db cfh,01h,01h,e2h
db d3h,01h,00h,02h
db f0h,01h,fah,16h
db fbh,01h,00h,04h
db ffh,03h,80h,f0h,80h,f2h,80h,f4h
Game7Patch:
db 00h,07h,00h,38h,00h,39h,03h,adh,fah,02h,00h,00h,00h,01h,00h,02h
db 08h,01h,fah,04h
db 20h,01h,03h,9bh
db 40h,01h,01h,97h
db 42h,06h,03h,9ch,01h,98h,02h,29h,fah,03h,fah,05h,fah,07h
db 43h,01h,03h,aeh
db 44h,03h,03h,6bh,04h,06h,fah,17h
db 60h,01h,02h,28h
db 70h,01h,fah,06h
db 80h,01h,03h,6ah
db 90h,01h,04h,05h
db a0h,0fh,00h,17h,01h,aeh,03h,f8h,03h,ffh,04h,46h,0ah,66h,0ah,76h,0ah,90h,0ah,97h,0ah,a8h,0ah,b5h,0ah,cfh,0ah,d6h,0ah,e2h,0ah,e9h
db a1h,0ch,00h,1bh,01h,b8h,03h,fbh,04h,03h,04h,42h,04h,49h,0Ah,6Fh,0ah,93h,0ah,7ah,0ah,b1h,0ah,d2h,0ah,e5h
db c2h,08h,00h,93h,00h,9eh,00h,a4h,00h,b8h,04h,65h,04h,99h,05h,fah,06h,05h
db c3h,03h,04h,12h,03h,69h,04h,04h
db c4h,01h,00h,c4h
db c5h,02h,00h,cdh,01h,42h
db c7h,03h,00h,d6h,01h,4bh,02h,00h
db c8h,03h,00h,dfh,02h,09h,02h,18h
db cah,01h,00h,fch
db cbh,01h,01h,0fh
db cch,02h,00h,e8h,0dh,f3h
db cdh,04h,03h,9ah,03h,ach,01h,96h,02h,27h
db f0h,01h,fah,16h
db ffh,03h,80h,f0h,80h,f2h,80h,f4h
org $4fff
.footer db ffh