Golden Axe: The Revenge of Death Adder
| Golden Axe: The Revenge of Death Adder |
|---|
|
Developer: Sega AM1[1]
|
| To do: Regional Differences (e.g. US version requires the player to go through all paths to beat the game) |
Golden Axe: The Revenge of Death Adder is the 1992 arcade sequel to the original Golden Axe, completely unrelated to the earlier released Genesis sequel Golden Axe II. Set several years after the events of the original game, four warriors (including a giant accompanied by an aged Gilius Thunderhead) join forces to save the world once again from the newly resurrected Death Adder. Because it ran on the advanced System 32 board, a Genesis port was out of the question and the game was unfortunately never ported to any of the later home consoles.
Uncompiled Code
Found in epr-14468-02.u3.
END Assembly Complete, 00000 error(s) found
:[ix+2] mov byte ptr ds1:[iy],dl add ix,4 dec cw bnz INITLP RET INIT ENDP ;------------------------------------------------------------------------------ ; V25 read/write check ;------------------------------------------------------------------------------ RW22 PROC _RW22: mov ch,byte ptr ds1:[ix+1] cmp ch,20h ; V25 r/w start ? bne _RW22 mov bw,8 ; counter offset (0008h) mov dh,byte ptr ds1:[ix+6h] ; add data mov dl,byte ptr ds1:[ix+7h] ; write start data LP_22: call AD_SET mov byte ptr ds1:[iy],dl ; RAM data write mov cl,byte ptr ds1:[iy] ; RAM data read cmp cl,dl bnz R22_NG add dl,dh inc bw cmp bw,7f0h ;stack area (10h) keep bnz LP_22 mov ch,22h ; RAM OK data set call SET_ON RET R22_NG: mov ch,2ah ; RAM NG data set call SET_ON RET RW22 ENDP ;------------------------------------------------------------------------------ ; V25 read / V60 write check ;------------------------------------------------------------------------------ RW26 PROC _RW26: mov ch,byte ptr ds1:[ix+1] cmp ch,4fh ; V60 write end ? bne _RW26 mov bw,8 ; counter offset (0008h) mov dh,byte ptr ds1:[ix+6h] ; add data mov dl,byte ptr ds1:[ix+7h] ; write start data LP_26: call AD_SET mov cl,byte ptr ds1:[iy] ; RAM data read cmp cl,dl bnz R26_NG add dl,dh inc bw cmp bw,7f0h bnz LP_26 mov ch,44h ; RAM OK data set call SET_ON RET R26_NG:
000020000FC :100400001F9D00 D07F00083518009D0000F2FB :10041000D89D0010F2C0FB000035310135E50035F4 :10042000B900AFFE9D00 D89D00FFF2C0D809D0 :100430000044360010053C8354029E4E158AC604C3 :100440002C38F2C39E836C01FDFD2038F7D90800DB :100450009E8374069E8354073511019E4E159E831C :100460000D3DCA380F70D6DB53FBF00738EAAD22DA :1004700035EC00C3AD2A35E600C39E836C01FDFD5B :100480004F38F7D908009E8374069E83540735DBE6 :10049000009E830D3DCA380F70D6DB53FBF0073842 :1004A000EDAD4435B900C3AD4A35B300C39E836C8E 4B00001FDFD5038F7D908009E837 E839491 :1004C000EF079E4E540735A3009E4E1570D6DB53A2 :1004D000FBF00738F1AD5F358500C34436F4044CBA :1004E0000000D8100083149E4E158AC6018AC701E9 :0404F0002C38F2C3EF :1004F4000A00C50011001100180018001F00C600F2 :1005040044361D054C8000D8300083149E4E158A55 :10051400C6018AC7012C38F2C377616B65207570F8 :100524002120474F4C44454E20415845205468658E :1005340020526576656E6765206F66204465617438 :10054400682D416464657221204C0000D80004BB0E :10055400009E4E158AC7012C38F7C39E4E6C019E
R6000 - stack overflow R6003 - integer divide by 0 R6009 - not enough space for environment run-time error R6002 - floating point not loaded R6001 - null pointer assignment
PC98EGC BGI PC98GRCGBGI SANS CHR TRIP CHR STARTUP ARC MCALC C
------------------------------------------------------------------------
;000h~3ffh write buff
;080h~0afh (startup function work)
;400h~7ffh read buff
;------------------------------------------------------------------------------
; start up function
;------------------------------------------------------------------------------
START_FUNC PROC
_ST_FU:
ldea ix,MESS_ST
mov iy,080h ;start function write buff
mov cw,16*3 ;loop count
loop_st:
mov dl,byte ptr ds0:[ix]
mov byte ptr ds1:[iy],dl
add ix,1
add iy,1
dec cw
bnz loop_st
RET
;0123456789abcdef
MESS_ST db 'wake up! GOLDEN ' ;16 byte 1 group
db 'AXE The Revenge ' ;16 byte 1 group
db 'of Death-Adder! ' ;16 byte 1 group
START_FUNC ENDP
;------------------------------------------------------------------------------
; work ram clr
;------------------------------------------------------------------------------
WORK_RAM_CLR PROC
_WO_RA:
mov iy,0000h ;work ram write adr.
mov cw,0400h ;loop count
mov dl,0000h
loop_wc:
mov byte ptr ds1:[iy],dl
add iy,1
dec cw
bnz loop_wc
RET
WORK_RAM_CLR ENDP
;------------------------------------------------------------------------------
; RAM check result set routine
;------------------------------------------------------------------------------
SET_ON PROC
_SET_ON:
mov byte ptr ds1:[ix+1],ch ; check result set
mov cl,byte ptr ds1:[ix+1] ; result set ok ?
cmp ch,cl
bnz _SET_ON
RET
SET_ON ENDP
;------------------------------------------------------------------------------
; V25 address chenge & set routine ix : 0
; aw : chenge address
; bw : address counter
;------------------------------------------------------------------------------
AD_SET PROC
AST_LP:
mov byte ptr ds1:[ix+2],bl ; lower address set (10002h)
mov byte ptr ds1:[ix+3],bh ; upper address set (10004h)
mov cl,byte ptr ds1:[ix+2] ; lower set ok ?
mov ch,byte ptr ds1:[ix+3] ; upper set ok ?
cmp bw,cw
bnz AST_LP
mov iy,bw
RET
AD_SET ENDP
RMCK ENDS
;------------------------------------------------------------------------------
; data table
;------------------------------------------------------------------------------
RMCK SEGMENT
org 1000h
;xxf01=00 --pm0
;xxf02=00 --pmc0
;xxf09=00 --pm1
;xxf0a=08 --pmc1
;xxf11=00 --pm2
;xxf12=00 --pmc2
;xxfe8=00 --wtc
;xxfe9=00 --???
;xxfeb=00 --prc
ITDT dw 0f01h,0,0f02h,0,0f09h,0,0f0ah,8,0f11h,0,0f12h,0
dw 0fe8h,1001h,0fe9h,0,0febh,4ch
RMCK ENDS
;------------------------------------------------------------------------------
; reset vecter
;------------------------------------------------------------------------------
RMCK SEGMENT
org 0fff0h
br FAR PTR START
RMCK ENDS
END
RMCK ENDS
;------------------------------------------------------------------------------
; data table
;------------------------------------------------------------------------------
RMCK SEGMENT
org 1000h
;xxf01=00 ' ;16 byte 1 group
202020202020
0756 20202020202020202020 345 db ' ' ;16 byte 1 group
202020202020
0766 20202020202020202020 346 db ' ' ;16 byte 1 group
202020202020
0776 20202020202020202020 347 db ' ' ;16 byte 1 group
202020202020
348
349 WRITE_EVENT2 ENDP
350
uPD70320 Assembler V3.10 SEC 01 Sep 92 12:30:49 PAGE 8
LOC OBJ LINE SOURCE
0786 351 WRITE_EVENT3 PROC
352
0786 BF0404 353 mov iy,404h ;player0 id
0789 BA0000 354 mov dw,0
078C 268A15 355 mov dl,byte ptr ds1:[iy] ;v60 mainmode*16 read
078F 80FAFF 356 cmp dl,-1
0792 741A 357 be exit_ev3
0794 8D36AF07 358 ldea ix,MESS_EV3
0798 03F2 359 add ix,dw
079A BF4000 360 mov iy,40h ;id name buff
079D B91000 361 mov cw,16 ;loop count
07A0 362 loop_ev3:
07A0 8A14 363 mov dl,byte ptr ds0:[ix]
07A2 268815 364 mov byte ptr ds1:[iy],dl
07A5 83C601 365 add ix,1
07A8 83C701 366 add iy,1
07AB 49 367 dec cw
07AC 75F2 368 bnz loop_ev3
07AE 369 exit_ev3:
07AE C3 370 RET
371
372 ;0123456789abcdef
373
07AF 73696E62617420202020 374 MESS_EV3 db 'sinbat ' ;16 byte 1 group
202020202020
07BF 72616D61796120202020 375 db 'ramaya ' ;16 byte 1 group
202020202020
07CF 676F6C646F7220202020 376 db 'goldor ' ;16 byte 1 group
202020202020
07DF 64617461202020202020 377 db 'data ' ;16 byte 1 group
202020202020
07EF 20202020202020202020 378 db ' ' ;16 byte 1 group
202020202020
07FF 20202020202020202020 379 db ' ' ;16 byte 1 group
202020202020
080F 20202020202020202020 380 db ' ' ;16 byte 1 group
202020202020
081F 20202020202020202020 381 db ' ' ;16 byte 1 group
202020202020
382
383 WRITE_EVENT3 ENDP
384
385
386
387
388 ;------------------------------------------------------------------------------
389 ; start up function
390 ;------------------------------------------------------------------------------
391
082F 392 START_FUNC PROC
393
082F 394 _ST_FU:
082F 8D364808 395 ldea ix,MESS_ST
0833 BF8000 396 mov iy,080h ;start function write buff
0836 B93000 397 mov cw,16*3 ;loop count
0839 398 loop_st:
uPD70320 Assembler V3.10 SEC 01 Sep 92 12:30:49 PAGE 9
LOC OBJ LINE SOURCE
0839 8A14 399 mov dl,byte ptr ds0:[ix]
083B 268815 400 mov byte ptr ds1:[iy],dl
083E 83C601 401 add ix,1
0841 83C701 402 add iy,1
0844 49 403 dec cw
0845 75F2 404 bnz loop_st
0847 C3 405 RET
406
407 ;0123456789abcdef
408
0848 77616B65207570212047 409 MESS_ST db 'wake up! GOLDEN ' ;16 byte 1 group
4F4C44454E20
0858 41584520546865205265 410 db 'AXE The Revenge ' ;16 byte 1 group
76656E676520
0868 6F662044656174682D41 411 db 'of Death-Adder! ' ;16 byte 1 group
646465722120
412
413 START_FUNC ENDP
414
415
416
417 ;------------------------------------------------------------------------------
418 ; work ram clr
wake up! GOLDEN AXE The Revenge of Death-Adder!
DB 079h ; 0FFH Change here !! ModRM 110B,src EndM CodeMacro push src:Dw DB 041h ; 68H Change here !! DW src EndM CodeMacro push src:Db(-128,127) DB 0a7h ; 6AH Change here !! DB src EndM ;------------------------------------------------------------------------------ ;CodeMacro push src:Rw ; R53 <01010B,src> ; 01010B Change here !! ;EndM CodeMacro push src:Rw(AW) DB 06dh ; R53 <01010B,000B> Change here !! EndM CodeMacro push src:Rw(BW) DB 05bh ; R53 <01010B,011B> Change here !! EndM CodeMacro push src:Rw(CW) DB 00dh ; R53 <01010B,001B> Change here !! EndM CodeMacro push src:Rw(DW) DB 08fh ; R53 <01010B,010B> Change here !! EndM CodeMacro push src:Rw(SP) DB 0f8h ; R53 <01010B,100B> Change here !! EndM CodeMacro push src:Rw(BP) DB 0ffh ; R53 <01010B,101B> Change here !! EndM CodeMacro push src:Rw(IX) DB 022h ; R53 <01010B,110B> Change here !! EndM CodeMacro push src:Rw(IY) DB 09fh ; R53 <01010B,111B> Change here !! EndM ;------------------------------------------------------------------------------ CodeMacro push src:I (R) DB 0aeh ; 60H Change here !! EndM CodeMacro push src:I (PSW) DB 012h ; 9CH Change here !! EndM CodeMacro rep Prefx DB 048h ; 0F3H Change here !! EndM CodeMacro repc Prefx DB 004h ; 65H Change here !! EndM CodeMacro repe Prefx DB 048h ; 0F3H Change here !! EndM CodeMacro repnc Prefx DB 0b4h ; 64H Change here !! EndM CodeMacro repne Prefx DB 06bh ; 0F2H Change here !! EndM CodeMacro repnz Prefx DB 06bh ; 0F2H Change here !! EndM CodeMacro repz Prefx DB 048h ; 0F3H Change here !! EndM ;------------------------------------------------------------------------------ CodeMacro ret src:Dw R413 <1100B,Proclen,010B> ; 1100B , 010B Change here !! DW src EndM CodeMacro ret src:Db R413 <1100B,Proclen,010B> ; 1100B , 010B Change here !! DW src EndM CodeMacro ret R413 <1100B,Proclen,011B> ; 1100B , 011B Change here !! EndM ;------------------------------------------------------------------------------ CodeMacro reti DB 093h ; 0CFH Change here !! EndM CodeMacro retrbi DB 0d0h ; 0FH Change here !! DB 91H EndM CodeMacro rol dst:Ew,count:Db Segfix dst DB 07ah ; 0C1H Change here !! ModRM 000B,dst DB count EndM CodeMacro rol dst:Eb,count:Db Segfix dst DB 036h ; 0C0H Change here !! ModRM 000B,dst DB count EndM CodeMacro rol dst=Ew,count:Rb(CL) Segfix dst DB 0bdh ; 0D3H Change here !! ModRM 000B,dst EndM CodeMacro rol dst=Eb,count:Rb(CL) Segfix dst DB 0a4h ; 0D2H Change here !! ModRM 000B,dst EndM CodeMacro rol dst:Ew,count:Db(1) Segfix dst DB 0e1h ; 0D1H Change here !! ModRM 000B,dst EndM CodeMacro rol dst:Eb,count:Db(1) Segfix dst DB 052h ; 0D0H Change here !! ModRM 000B,dst EndM CodeMacro rol4 dst:Eb Segfix dst ; DW 280FH DB 0d0h DB 28H ; 0FH Change here !! ModRM 000B,dst EndM CodeMacro rolc dst:Ew,count:Db Segfix dst DB 07ah ; 0C1H Change here !! ModRM 010B,dst DB count EndM CodeMacro rolc dst:Eb,count:Db Segfix dst DB 036h ; 0C0H Change here !! ModRM 010B,dst DB count EndM CodeMacro rolc dst=Ew,count:Rb(CL) Segfix dst DB 0bdh ; 0D3H Change here !! ModRM 010B,dst EndM CodeMacro rolc dst=Eb,count:Rb(CL) Segfix dst DB 0a4h ; 0D2H Change here !! ModRM 010B,dst EndM CodeMacro rolc dst:Ew,count:Db(1) Segfix dst DB 0e1h ; 0D1H Change here !! ModRM 010B,dst EndM CodeMacro rolc dst:Eb,count:Db(1) Segfix dst DB 052h ; 0D0H Change here !! ModRM 010B,dst EndM CodeMacro ror dst:Ew,count:Db Segfix dst DB 07ah ; 0C1H Change here !! ModRM 001B,dst DB count EndM CodeMacro ror dst:Eb,count:Db Segfix dst DB 036h ; 0C0H Change here !! ModRM 001B,dst DB count EndM CodeMacro ror dst=Ew,count:Rb(CL) Segfix dst DB 0bdh ; 0D3H Change here !! ModRM 001B,dst EndM CodeMacro ror dst=Eb,count:Rb(CL) Segfix dst DB 0a4h ; 0D2H Change here !!
shr dst=Ew,count:Rb(CL)
Segfix dst
DB 0bdh ; 0D3H Change here !!
ModRM 101B,dst
EndM
CodeMacro shr dst=Eb,count:Rb(CL)
Segfix dst
DB 0a4h ; 0D2H Change here !!
ModRM 101B,dst
EndM
CodeMacro shr dst:Ew,count:Db(1)
Segfix dst
DB 0e1h ; 0D1H Change here !!
ModRM 101B,dst
EndM
CodeMacro shr dst:Eb,count:Db(1)
Segfix dst
DB 052h ; 0D0H Change here !!
ModRM 101B,dst
EndM
CodeMacro shra dst:Ew,count:Db
Segfix dst
DB 07ah ; 0C1H Change here !!
ModRM 111B,dst
DB count
EndM
CodeMacro shra dst:Eb,count:Db
Segfix dst
DB 036h ; 0C0H Change here !!
ModRM 111B,dst
DB count
EndM
CodeMacro shra dst=Ew,count:Rb(CL)
Segfix dst
DB 0bdh ; 0D3H Change here !!
ModRM 111B,dst
EndM
CodeMacro shra dst=Eb,count:Rb(CL)
Segfix dst
DB 0a4h ; 0D2H Change here !!
ModRM 111B,dst
EndM
CodeMacro shra dst:Ew,count:Db(1)
Segfix dst
DB 0e1h ; 0D1H Change here !!
ModRM 111B,dst
EndM
CodeMacro shra dst:Eb,count:Db(1)
Segfix dst
DB 052h ; 0D0H Change here !!
ModRM 111B,dst
EndM
CodeMacro stm Di_ptr:Mw
NoSegfix DS1,Di_ptr
DB 0fch ; 0ABH Change here !!
EndM
CodeMacro stm Di_ptr:Mb
NoSegfix DS1,Di_ptr
DB 081h ; 0AAH Change here !!
EndM
CodeMacro stmb
DB 081h ; 0AAH Change here !!
EndM
CodeMacro stmw
DB 0fch ; 0ABH Change here !!
EndM
CodeMacro stop
DB 0d0h ; 0FH Change here !!
DB 9EH
EndM
CodeMacro sub dst:Ew,src:Dw
Segfix dst
DB 053h ; 81H Change here !!
ModRM 101B,dst
DW src
EndM
CodeMacro sub dst:Eb,src:Db
Segfix dst
DB 0fdh ; 80H Change here !!
ModRM 101B,dst
DB src
EndM
CodeMacro sub dst:Ew,src:Db
Segfix dst
DB 053h ; 81H Change here !!
ModRM 101B,dst
DW src
EndM
CodeMacro sub dst:Ew,src:Db(-128,127)
Segfix dst
DB 08ah ; 83H Change here !!
ModRM 101B,dst
DB src
EndM
CodeMacro sub dst:Ew,src:Rw
Segfix dst
DB 009h ; 29H Change here !!
ModRM src,dst
EndM
CodeMacro sub dst:Eb,src:Rb
Segfix dst
DB 0b1h ; 28H Change here !!
ModRM src,dst
EndM
CodeMacro sub dst:Rw,src:Ew
Segfix src
DB 00bh ; 2BH Change here !!
ModRM dst,src
EndM
CodeMacro sub dst:Rb,src:Eb
Segfix src
DB 028h ; 2AH Change here !!
ModRM dst,src
EndM
CodeMacro sub dst:Aw,src:Dw
DB 082h ; 2DH Change here !!
DW src
EndM
CodeMacro sub dst:Aw,src:Db
DB 082h ; 2DH Change here !!
DW src
EndM
CodeMacro sub dst:Ab,src:Db
DB 04ah ; 2CH Change here !!
DB src
EndM
CodeMacro sub4s dst:M ,src:M
NoSegfix DS1,dst
Segfix src
; DW 220FH
DB 0d0h
DB 22H ; 0FH Change here !!
EndM
CodeMacro sub4s
; DW 220FH
DB 0d0h
DB 22H ; 0FH Change here !!
EndM
CodeMacro subc dst:Ew,src:Dw
Segfix dst
DB 053h ; 81H Change here !!
ModRM 011B,dst
DW src
EndM
CodeMacro subc dst:Eb,src:Db
Segfix dst
DB 0fdh ; 80H Change here !!
ModRM 011B,dst
DB src
EndM
CodeMacro subc dst:Ew,src:Db
Segfix dst
DB 053h ; 81H Change here !!
ModRM 011B,dst
DW src
EndM
CodeMacro subc dst:Ew,src:Db(-128,127)
Segfix dst
DB 08ah ; 83H Change here !!
ModRM 011B,dst
DB src
EndM
CodeMacro subc dst:Ew,src:Rw
Segfix dst
DB 03ah ; 19H Change here !!
ModRM src,dst
EndM
CodeMacro subc dst:Eb,src:Rb
Segfix dst
DB 019h ; 18H Change here !!
ModRM src,dst
EndM
CodeMacro subc dst:Rw,src:Ew
Segfix src
DB 088h ; 1BH Change here !!
ModRM dst,src
EndM
CodeMacro subc dst:Rb,src:Eb
Segfix src
DB 0d7h ; 1AH Change here !!
ModRM dst,src
EndM
CodeMacro subc dst:Aw,src:Dw
DB 0a3h ; 1DH Change here !!
DW src
EndM
CodeMacro subc dst:Aw,src:Db
DB 0a3h ; 1DH Change here !!
DW src
EndM
CodeMacro subc dst:Ab,src:Db
DB 0b7h ; 1CH Change here !!
DB src
EndM
CodeMacro test dst:Ew,src:Dw
Segfix dst
DB 05fh ; 0F7H Change here !!
ModRM 000B,dst
DW src
EndM
CodeMacro test dst:Eb,src:Db
Segfix dst
DB 0c0h ; 0F6H Change here !!
ModRM 000B,dst
DB src
EndM
CodeMacro test dst:Ew,src:Db
Segfix dst
DB 05fh ; 0F7H Change here !!
ModRM 000B,dst
DW src
EndM
CodeMacro test dst:Ew,src:Rw
Segfix dst
DB 014h ; 85H Change here !!
ModRM src,dst
EndM
CodeMacro test dst:Eb,src:Rb
Segfix dst
DB 027h ; 84H Change here !!
ModRM src,dst
EndM
CodeMacro test dst:Rw,src:Ew
Segfix src
DB 014h ; 85H Change here !!
ModRM dst,src
EndM
CodeMacro test dst:Rb,src:Eb
Segfix src
DB 027h ; 84H Change here !!
ModRM dst,src
EndM
CodeMacro test dst:Aw,src:Dw
DB 04bh ; 0A9H Change here !!
DW src
EndM
CodeMacro test dst:Aw,src:Db
DB 04bh ; 0A9H Change here !!
DW src
EndM
CodeMacro test dst:Ab,src:Db
DB 0d2h ; 0A8H Change here !!
DB src
EndM
CodeMacro test1 dst=Ew,off:Db(0,15)
Segfix dst
; DW 190FH
DB 0d0h
DB 19H ; 0FH Change here !!
ModRM 000B,dst
DB off
EndM
CodeMacro test1 dst=Eb,off:Db(0,7)
Segfix dst
; DW 180FH
DB 0d0h
DB 18H ; 0FH Change here !!
ModRM 000B,dst
DB off
EndM
CodeMacro test1 dst:Ew,off:Rb(CL)
Segfix dst
; DW 110FH
DB 0d0h
DB 11H ; 0FH Change here !!
ModRM 000B,dst
EndM
CodeMacro test1 dst:Eb,off:Rb(CL)
Segfix dst
; DW 100FH
DB 0d0h
DB 10H ; 0FH Change here !!
ModRM 000B,dst
EndM
CodeMacro trans table:Mb
Segfix table
DB 08dh ; 0D7H Change here !!
EndM
CodeMacro trans
DB 08dh ; 0D7H Change here !!
EndM
CodeMacro transb
DB 08dh ; 0D7H Change here !!
EndM
CodeMacro xch dst:Ew,src:Rw
Segfix dst
DB 0bch ; 87H Change here !!
ModRM src,dst
EndM
CodeMacro xch dst:Eb,src:Rb
Segfix dst
DB 0b0h ; 86H Change here !!
ModRM src,dst
EndM
CodeMacro xch dst:Rw,src:Ew
Segfix src
DB 0bch ; 87H Change here !!
ModRM dst,src
EndM
CodeMacro xch dst:Rb,src:Eb
Segfix src
DB 0b0h ; 86H Change here !!
ModRM dst,src
EndM
;------------------------------------------------------------------------------
;CodeMacro xch dst:Aw,src:Rw
; R53 <10010B,src> ; 10010B Change here !!
;EndM
CodeMacro xch dst:Aw,src:Rw(AW)
DB 90h ; R53 <10010B,000B> Change here !!
EndM
CodeMacro xch dst:Aw,src:Rw(BW)
DB 04dh ; R53 <10010B,011B> Change here !!
EndM
CodeMacro xch dst:Aw,src:Rw(CW)
DB 08bh ; R53 <10010B,001B> Change here !!
EndM
CodeMacro xch dst:Aw,src:Rw(DW)
DB 0d1h ; R53 <10010B,010B> Change here !!
EndM
CodeMacro xch dst:Aw,src:Rw(SP)
DB 084h ; R53 <10010B,100B> Change here !!
EndM
CodeMacro xch dst:Aw,src:Rw(BP)
DB 02dh ; R53 <10010B,101B> Change here !!
EndM
CodeMacro xch dst:Aw,src:Rw(IX)
DB 0e3h ; R53 <10010B,110B> Change here !!
EndM
CodeMacro xch dst:Aw,src:Rw(IY)
DB 072h ; R53 <10010B,111B> Change here !!
EndM
;------------------------------------------------------------------------------
;CodeMacro xch dst:Rw,src:Aw
; R53 <10010B,dst> ; 10010B Change here !!
;EndM
CodeMacro xch dst:Rw(AW),src:Aw
DB 90h ; R53 <10010B,000B> Change here !!
EndM
CodeMacro xch dst:Rw(BW),src:Aw
DB 04dh ; R53 <10010B,011B> Change here !!
EndM
CodeMacro xch dst:Rw(CW),src:Aw
DB 08bh ; R53 <10010B,001B> Change here !!
EndM
CodeMacro xch dst:Rw(DW),src:Aw
DB 0d1h ; R53 <10010B,010B> Change here !!
EndM
CodeMacro xch dst:Rw(SP),src:Aw
DB 084h ; R53 <10010B,100B> Change here !!
EndM
CodeMacro xch dst:Rw(BP),src:Aw
DB 02dh ; R53 <10010B,101B> Change here !!
EndM
CodeMacro xch dst:Rw(IX),src:Aw
DB 0e3h ; R53 <10010B,110B> Change here !!
EndM
CodeMacro xch dst:Rw(IY),src:Aw
DB 072h ; R53 <10010B,111B> Change here !!
EndM
;------------------------------------------------------------------------------
CodeMacro xor dst:Ew,src:Dw
Segfix dst
DB 053h ; 81H Change here !!
ModRM 110B,dst
DW src
EndM
CodeMacro xor dst:Eb,src:Db
Segfix dst
DB 0fdh ; 80H Change here !!
ModRM 110B,dst
DB src
EndM
CodeMacro xor dst:Ew,src:Db
Segfix dst
DB
wake up! GOLDEN AXE The Revenge of Death-Adder!
wake up! GOLDEN
AXE The Revenge
of Death-Adder!
aramawari
;------------------------------------------------------------------------------
; SFR INITIAL
;------------------------------------------------------------------------------
INIT PROC
_INIT:
mov aw,0
mov ds0,aw
mov aw,0ff00h
mov ds1,aw
mov cw,9
ldea ix,ITDT
INITLP:
mov iy,word ptr ds0:[ix]
mov dl,byte ptr ds0:[ix+2]
mov byte ptr ds1:[iy],dl
add ix,4
dec cw
bnz INITLP
RET
INIT ENDP
;------------------------------------------------------------------------------
; V25 read/write check
;------------------------------------------------------------------------------
RW22 PROC
_RW22:
mov ch,byte ptr ds1:[ix+1]
cmp ch,20h ; V25 r/w start ?
bne _RW22
mov bw,8 ; counter offset (0008h)
mov dh,byte ptr ds1:[ix+6h] ; add data
mov dl,byte ptr ds1:[ix+7h] ; write start data
LP_22:
call AD_SET
mov byte ptr ds1:[iy],dl ; RAM data write
mov cl,byte ptr ds1:[iy] ; RAM data read
cmp cl,dl
bnz R22_NG
add dl,dh
inc bw
cmp bw,7f0h ;stack area (10h) keep
bnz LP_22
mov ch,22h ; RAM OK data set
call SET_ON
RET
R22_NG:
mov ch,2ah ; RAM NG data set
call SET_ON
RET
RW22 ENDP
;------------------------------------------------------------------------------
; V25 read / V60 write check
;------------------------------------------------------------------------------
RW26 PROC
_RW26:
mov ch,byte ptr ds1:[ix+1]
cmp ch,4fh ; V60 write end ?
bne _RW26
mov bw,8 ; counter offset (0008h)
mov dh,byte ptr ds1:[ix+6h] ; add data
mov dl,byte ptr ds1:[ix+7h] ; write start data
LP_26:
call AD_SET
mov cl,byte ptr ds1:[iy] ; RAM data read
cmp cl,dl
bnz R26_NG
add dl,dh
inc bw
cmp bw,7f0h
bnz LP_26
mov ch,44h ; RAM OK data set
call SET_ON
RET
R26_NG:
mov ch,4ah ; RAM NG data set
call SET_ON
RET
RW26 ENDP
;------------------------------------------------------------------------------
; V60 read / V25 write check
;------------------------------------------------------------------------------
RW62 PROC
_RW62:
mov ch,byte ptr ds1:[ix+1]
cmp ch,50h ; before result write end ?
bne _RW62
mov bw,8 ; counter offset (0008h)
mov dh,byte ptr ds1:[ix+6h] ; add data
mov dl,byte ptr ds1:[ix+7efh] ; write start data
mov byte ptr ds1:[ix+7h],dl ; write start data
LP_62:
call AD_SET
mov byte ptr ds1:[iy],dl ; RAM data write
add dl,dh
inc bw
cmp bw,7f0h
bnz LP_62
mov ch,5fh ; write end code set
call SET_ON
RET
RW62 ENDP
;------------------------------------------------------------------------------
; arabian fight security routin
;------------------------------------------------------------------------------
WRITE_AXE PROC
_RW_AXE:
ldea ix,PLCOL_AX
mov iy,0 ;
mov cw,16 ;loop count
loop:
mov dl,byte ptr ds0:[ix]
mov byte ptr ds1:[iy],dl
add ix,1
add iy,1
dec cw
bnz loop
RET
PLAYCOL1 equ 0000000aH
PLAYCOL2 equ 00000011H
PLAYCOL3 equ 00000018H
PLAYCOL4 equ 0000001fH
ZANZOCOL1 equ 000000c5H
ZANZOCOL2 equ 000000c6H
PLCOL_AXE
dw PLAYCOL1 -- body color
dw ZANZOCOL1 -- zanzoh color
dw PLAYCOL2 -- body color
dw PLAYCOL2 -- zanzoh color
dw PLAYCOL3 -- body color
dw PLAYCOL3 -- zanzoh color
dw PLAYCOL4 -- body color
dw ZANZOCOL2 -- zanzoh color
WRITE_AXE ENDP
;------------------------------------------------------------------------------
; event security routin
;------------------------------------------------------------------------------
;000h~3ffh write buff
;080h~0afh (startup function work)
;400h~7ffh read buff
;------------------------------------------------------------------------------
; start up function
;------------------------------------------------------------------------------
START_FUNC PROC
_ST_FU:
ldea ix,MESS_ST
mov iy,080h ;start function write buff
mov cw,16*3 ;loop count
loop_st:
mov dl,byte ptr ds0:[ix]
mov byte ptr ds1:[iy],dl
add ix,1
add iy,1
dec cw
bnz loop_st
RET
;0123456789abcdef
MESS_ST db 'wake up! GOLDEN ' ;16 byte 1 group
db 'AXE The Revenge ' ;16 byte 1 group
db 'of Death-Adder! ' ;16 byte 1 group
START_FUNC ENDP
;------------------------------------------------------------------------------
; work ram clr
;------------------------------------------------------------------------------
WORK_RAM_CLR PROC
_WO_RA:
mov iy,0000h ;work ram write adr.
mov cw,0400h ;loop count
mov dl,0000h
loop_wc:
mov byte ptr ds1:[iy],dl
add iy,1
dec cw
bnz loop_wc
RET
WORK_RAM_CLR ENDP
;------------------------------------------------------------------------------
; RAM check result set routine
;------------------------------------------------------------------------------
SET_ON PROC
_SET_ON:
mov byte ptr ds1:[ix+1],ch ; check result set
mov cl,byte ptr ds1:[ix+1] ; result set ok ?
cmp ch,cl
bnz _SET_ON
RET
SET_ON ENDP
;------------------------------------------------------------------------------
; V25 address chenge & set routine ix : 0
; aw : chenge address
; bw : address counter
;------------------------------------------------------------------------------
AD_SET PROC
AST_LP:
mov byte ptr ds1:[ix+2],bl ; lower address set (10002h)
mov byte ptr ds1:[ix+3],bh ; upper address set (10004h)
mov cl,byte ptr ds1:[ix+2] ; lower set ok ?
mov ch,byte ptr ds1:[ix+3] ; upper set ok ?
cmp bw,cw
bnz AST_LP
mov iy,bw
RET
AD_SET ENDP
RMCK ENDS
;------------------------------------------------------------------------------
; data table
;------------------------------------------------------------------------------
RMCK SEGMENT
org 1000h
;xxf01=00 --pm0
;xxf02=00 --pmc0
;xxf09=00 --pm1
;xxf0a=08 --pmc1
;xxf11=00 --pm2
;xxf12=00 --pmc2
;xxfe8=00 --wtc
;xxfe9=00 --???
;xxfeb=00 --prc
ITDT dw 0f01h,0,0f02h,0,0f09h,0,0f0ah,8,0f11h,0,0f12h,0
dw 0fe8h,1001h,0fe9h,0,0febh,4ch
RMCK ENDS
;------------------------------------------------------------------------------
; reset vecter
;------------------------------------------------------------------------------
RMCK SEGMENT
org 0fff0h
br FAR PTR START
RMCK ENDS
END
ST_LP:
mov byte ptr ds1:[ix+2],bl ; lower address set (10002h)
mov byte ptr ds1:[ix+3],bh ; upper address set (10004h)
mov cl,byte ptr ds1:[ix+2] ; lower set ok ?
mov ch,byte ptr ds1:[ix+3] ; upper set ok ?
cmp bw,cw
bnz AST_LP
mov iy,bw
RET
AD_SET ENDP
RMCK ENDS
;------------------------------------------------------------------------------
; data table
;------------------------------------------------------------------------------
RMCK SEGMENT
org 1000h
;xxf01=00 --pm0
;xxf02=00 --pmc0
;xxf09=00 --pm1
;xxf0a=08 --pmc1
;xxf11=00 --pm2
;xxf12=00 --pmc2
;xxfe8=00 --wtc
;xxfe9=00 --???
;xxfeb=00 --prc
ITDT dw 0f01h,0,0f02h,0,0f09h,0,0f0ah,8,0f11h,0,0f12h,0
dw 0fe8h,1001h,0fe9h,0,0febh,4ch
RMCK ENDS
;-------------------------------------------------------------------------
;000h~3ffh write buff
;000h~00fh (mode name buff)
;010h~01fh (id name buff)
;080h~08fh (startup function work)
;400h~7ffh read buff
;400h (1)main_mode
;401h (1)id(player 0)
;402h (1)id(player 1)
;403h (1)id(player 2)
;404h (1)id(player 3)
WRITE_EVENT0 PROC
mov iy,401h ;player0 id
mov dw,0
mov dl,byte ptr ds1:[iy] ;v60 mainmode*16 read
cmp dl,-1
be exit_ev0
ldea ix,MESS_EV0
add ix,dw
mov iy,10h ;id name buff
mov cw,16 ;loop count
loop_ev0:
mov dl,byte ptr ds0:[ix]
mov byte ptr ds1:[iy],dl
add ix,1
add iy,1
dec cw
bnz loop_ev0
exit_ev0:
RET
;0123456789abcdef
MESS_EV0 db 'sinbat ' ;16 byte 1 group
db 'ramaya ' ;16 byte 1 group
db 'goldor ' ;16 byte 1 group
db 'data ' ;16 byte 1 group
db ' ' ;16 byte 1 group
db ' ' ;16 byte 1 group
db ' ' ;16 byte 1 group
db ' ' ;16 byte 1 group
WRITE_EVENT0 ENDP
WRITE_EVENT1 PROC
mov iy,402h ;player1 id
mov dw,0
mov dl,byte ptr ds1:[iy] ;v60 mainmode*16 read
cmp dl,-1
be exit_ev1
ldea ix,MESS_EV1
add ix,dw
mov iy,20h ;id name buff
mov cw,16 ;loop count
loop_ev1:
mov dl,byte ptr ds0:[ix]
mov byte ptr ds1:[iy],dl
add ix,1
add iy,1
dec cw
bnz loop_ev1
exit_ev1:
RET
;0123456789abcdef
MESS_EV1 db 'sinbat ' ;16 byte 1 group
db 'ramaya ' ;16 byte 1 group
db 'goldor ' ;16 byte 1 group
db 'data ' ;16 byte 1 group
db ' ' ;16 byte 1 group
db ' ' ;16 byte 1 group
db ' ' ;16 byte 1 group
db ' ' ;16 byte 1 group
WRITE_EVENT1 ENDP
WRITE_EVENT2 PROC
mov iy,403h ;player0 id
mov dw,0
mov dl,byte ptr ds1:[iy] ;v60 mainmode*16 read
cmp dl,-1
be exit_ev2
ldea ix,MESS_EV2
add ix,dw
mov iy,30h ;id name buff
mov cw,16 ;loop count
loop_ev2:
mov dl,byte ptr ds0:[ix]
mov byte ptr ds1:[iy],dl
add ix,1
add iy,1
dec cw
bnz loop_ev2
exit_ev2:
RET
;0123456789abcdef
MESS_EV2 db 'sinbat ' ;16 byte 1 group
db 'ramaya ' ;16 byte 1 group
db 'goldor ' ;16 byte 1 group
db 'data ' ;16 byte 1 group
db ' ' ;16 byte 1 group
db ' ' ;16 byte 1 group
db ' ' ;16 byte 1 group
db ' ' ;16 byte 1 group
WRITE_EVENT2 ENDP
WRITE_EVENT3 PROC
mov iy,404h ;player0 id
mov dw,0
mov dl,byte ptr ds1:[iy] ;v60 mainmode*16 read
cmp dl,-1
be exit_ev3
ldea ix,MESS_EV3
add ix,dw
mov iy,40h ;id name buff
mov cw,16 ;loop count
loop_ev3:
mov dl,byte ptr ds0:[ix]
mov byte ptr ds1:[iy],dl
add ix,1
add iy,1
dec cw
bnz loop_ev3
exit_ev3:
RET
;0123456789abcdef
MESS_EV3 db 'sinbat ' ;16 byte 1 group
db 'ramaya ' ;16 byte 1 group
db 'goldor ' ;16 byte 1 group
db 'data ' ;16 byte 1 group
db ' ' ;16 byte 1 group
db ' ' ;16 byte 1 group
db ' ' ;16 byte 1 group
db ' ' ;16 byte 1 group
WRITE_EVENT3 ENDP
;------------------------------------------------------------------------------
; start up function
;------------------------------------------------------------------------------
START_FUNC PROC
_ST_FU:
ldea ix,MESS_ST
mov iy,080h ;start function write buff
mov cw,16*3 ;loop count
loop_st:
mov dl,byte ptr ds0:[ix]
mov byte ptr ds1:[iy],dl
add ix,1
add iy,1
dec cw
bnz loop_st
RET
;0123456789abcdef
MESS_ST db 'wake up! GOLDEN ' ;16 byte 1 group
db 'AXE The Revenge ' ;16 byte 1 group
db 'of Death-Adder! ' ;16 byte 1 group
START_FUNC ENDP
;------------------------------------------------------------------------------
; work ram clr
;------------------------------------------------------------------------------
WORK_RAM_CLR PROC
_WO_RA:
mov iy,0000h ;work ram write adr.
mov cw,0400h ;loop count
mov dl,0000h
loop_wc:
mov byte ptr ds1:[iy],dl
add iy,1
dec cw
bnz loop_wc
RET
WORK_RAM_CLR ENDP
;------------------------------------------------------------------------------
; RAM check result set routine
;------------------------------------------------------------------------------
SET_ON PROC
_SET_ON:
mov byte ptr ds1:[ix+1],ch ; check result set
mov cl,byte ptr ds1:[ix+1] ; result set ok ?
cmp ch,cl
bnz _SET_ON
RET
SET_ON ENDP
;------------------------------------------------------------------------------
; V25 address chenge & set routine ix : 0
; aw : chenge address
; bw : address counter
;------------------------------------------------------------------------------
AD_SET PROC
AST_LP:
mov byte ptr ds1:[ix+2],bl ; lower address set (10002h)
mov byte ptr ds1:[ix+3],bh ; upper address set (10004h)
mov cl,byte ptr ds1:[ix+2] ; lower set ok ?
mov ch,byte ptr ds1:[ix+3] ; upper set ok ?
cmp bw,cw
bnz AST_LP
mov iy,bw
RET
AD_SET ENDP
RMCK ENDS
;------------------------------------------------------------------------------
; data table
;-------------------------------------------------------
References
The Golden Axe series
| |
|---|---|
| Arcade | Golden Axe • Golden Axe: The Revenge of Death Adder • Golden Axe: The Duel |
| Genesis | Golden Axe (Prototype) • Golden Axe II (Prototype) • Golden Axe III |
| TurboGrafx-CD | Golden Axe |
| Game Gear | Ax Battler: A Legend of Golden Axe |
| Sega Saturn | Golden Axe: The Duel |
| WonderSwan Color | Golden Axe |
| PlayStation 2 | Sega Ages 2500 Series Vol. 5: Golden Axe |
Cleanup
Cleanup
Cleanup > To do
Games > Games by content > Games with hidden development-related text
Games > Games by content > Games with uncompiled source code
Games > Games by developer > Games developed by Sega > Games developed by Sega AM1
Games > Games by platform > Arcade games
Games > Games by publisher > Games published by Sega
Games > Games by release date > Games released in 1992
Games > Games by release date > Games released in September
Games > Games by series > Golden Axe series
Hidden categories > Pages missing date references
Hidden categories > Pages missing publisher references
