If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

Golden Axe: The Revenge of Death Adder

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

Golden Axe: The Revenge of Death Adder

Developer: Sega AM1[1]
Publisher: Sega
Platform: Arcade (Sega System 32)
Released internationally: 1992
Released in JP: September 1992[1]
Released in US: September 1992[2]


SourceIcon.png This game has uncompiled source code.
DevTextIcon.png This game has hidden development-related text.


Hmmm...
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