Advertisement
xiahanlu

Untitled

Sep 11th, 2018
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 30.55 KB | None | 0 0
  1. ;; Sharp LR35902 Chip for GameBoy
  2.  
  3. ;; Copyright (C) 2018 moecmks
  4. ;; This file is part of KS3578.
  5. ;;
  6. ;; LR35902.asm is free software; you can redistribute it and/or modify it under the
  7. ;; terms of the GNU General Public License as published by the Free Software
  8. ;; Foundation; either version 3 of the License, or (at your option) any later
  9. ;; version.
  10.  
  11.   .686                      ; create 32 bit code          
  12.   .model flat, stdcall      ; 32 bit memory model
  13.   option casemap :none      ; case sensitive
  14.  
  15. ;; Sharp LR35902 Chip opcode mapper
  16. ;; http://www.pastraiser.com/cpu/gameboy/gameboy_opcodes.html
  17.  
  18. ;; Register F Mask
  19. ;; The register flag field is different from the standard, in order to optimize instruction operation.
  20. Z_FLAG equ 040H
  21. H_FLAG equ 010H
  22. N_FLAG equ 002H
  23. C_FLAG equ 001H
  24.  
  25. ;; extern memory/IO read/write
  26. extrn MmuRead@4:proc  ;; prototype uint8_t __stdcall MmuRead (void *GameboyObj, uint64_t addresss)
  27. extrn MmuWrite@8:proc ;; prototype void __stdcall MmuWrite (void *GameboyObj, uint64_t addresss)
  28. extrn MmuReadWord@4:proc ;; prototype uint16_t __stdcall MmuReadWord (void *GameboyObj, uint64_t addresss, uint8_t value)
  29. extrn MmuWriteWord@8:proc ;; prototype void __stdcall MmuWriteWord (void *GameboyObj, uint64_t addresss, uint16_t value)
  30.  
  31. ;; IRQ Interrupt mask
  32. IRQ_1 equ 001H  ;;  VBLANK (NMI)
  33. IRQ_2 equ 002H  ;;  LCDC
  34. IRQ_3 equ 004H  ;;  Programmable timer
  35. IRQ_4 equ 008H  ;;  Serial port switching
  36. IRQ_5 equ 010H  ;;  P14-15 Descent edge acknowledge
  37.  
  38. ;; Interrupt exec address
  39. IRQ_1_ADDRESS equ 040H
  40. IRQ_2_ADDRESS equ 048H
  41. IRQ_3_ADDRESS equ 050H
  42. IRQ_4_ADDRESS equ 058H
  43. IRQ_5_ADDRESS equ 060H
  44.  
  45. ;;  define union .
  46. defREG macro _REG_LO, _REG_HI
  47.   union
  48.     struct
  49.       _REG_LO db ?
  50.       _REG_HI db ?
  51.     ends
  52.     _REG_HI&_REG_LO dw ?
  53.   ends
  54. endm
  55.  
  56. defREG2 macro _REG_LO, _REG_HI, _REG_BLOCK
  57.   union
  58.     struct
  59.       _REG_LO db ?
  60.       _REG_HI db ?
  61.     ends
  62.     _REG_BLOCK dw ?
  63.   ends
  64. endm
  65.  
  66. ;;  XXX:memory order dep.
  67. LR35902 struct
  68.   defREG F, A  ;; A (Accumulator)
  69.                ;; probably the most commonly used register.
  70.                ;; Many instructions have special extended operation codes for accumulators.
  71.                ;; F (Program status byte)
  72.                
  73.   ;; defREG C, B ;; A2008: syntax error : C
  74.   union
  75.     struct
  76.       C_ db ?
  77.       B db ?
  78.     ends
  79.     BC dw ?
  80.   ends           ;; Register BC, without special explanation.
  81.   defREG E, D    ;; Register DE, without special explanation.
  82.   defREG L, H    ;; Register HL, which is mostly used to address 16-bit address data,
  83.                  ;;                              also has the basic properties of BC, DE registers
  84.   defREG2 SP_LO, SP_HI, SP_ ;; Stack Pointer.
  85.   defREG2 PC_LO, PC_HI, PC ;; Program Pointer.
  86.  
  87.   IME db ?        ;; Interrupt Master Enable
  88.   Halted db ?     ;; for Halt
  89.  
  90.   GameBoyObj dd ?
  91. LR35902 ends
  92.  
  93.     .code
  94. ;;  prototype int32_t LR35902_exec (LR35902 *cpu);
  95. LR35902_exec proc C
  96.              option prologue:none, epilogue:none
  97.  
  98.         push ebx ;U -  save old frame      
  99.         push edi ;V -  save old frame
  100.         push esi
  101.         nop  
  102.        
  103. YG_PF_8 equ bl        
  104. YG_PF equ ebx
  105. YG_PC equ esi
  106. YG_GP equ edi
  107.  
  108.         ; ebx <- save now P (LR35902's PSB reg)
  109.        ; esi <- save now PC (LR35902's EIP reg)
  110.         ; edi <- save regs root
  111.         ; eax <- calc temp or final calc out reslt
  112.         ; ecx <- calc temp
  113.         ; edx <- calc temp
  114.        
  115.         mov YG_GP, [esp+4+12]   ;; fetch CPU struct
  116.         mov si, [YG_GP].PC  
  117.         mov bl, [YG_GP].F
  118.         assume edi:ptr LR35902
  119.        
  120.         ; Fetch Opcode, PC++
  121.         push YG_PC
  122.         push [YG_GP].GameBoyObj
  123.         call MmuRead@4
  124.         inc YG_PC
  125.        
  126. FetchCurrentPC_ToEax macro
  127.   push    edx
  128.   push   [YG_GP].GameBoyObj
  129.   call    MmuRead@4
  130. endm  
  131.  
  132. FetchCurrentPC_ToEax_Inc macro
  133.   FetchCurrentPC_ToEax
  134.   inc     edx
  135. endm  
  136.    
  137. FetchCurrentPC_Word_ToEax macro
  138.   push    edx
  139.   push   [YG_GP].GameBoyObj
  140.   call    MmuReadWord@4
  141. endm  
  142.  
  143. FetchCurrentPC_ToEax_Word_Inc macro
  144.   FetchCurrentPC_Word_ToEax
  145.   add edx, 2
  146. endm  
  147.    
  148. SetCyclesAndRet macro Cycles
  149.   ;; write back PC
  150.   mov [YG_GP].PC, si
  151.   mov eax, Cycles
  152.   jmp V_EXIT
  153. endm
  154.  
  155. SetCyclesRetP macro Cycles
  156.   ;; write back PC
  157.   mov [YG_GP].F, bl
  158.   SetCyclesAndRet Cycles
  159. endm
  160.  
  161. ;;  Register access-read unwind
  162. B_Write macro
  163.   mov [YG_GP].B, al
  164. endm
  165.  
  166. C_Write macro
  167.   mov [YG_GP].C_, al
  168. endm
  169.  
  170. D_Write macro
  171.   mov [YG_GP].D, al
  172. endm
  173.  
  174. E_Write macro
  175.   mov [YG_GP].E, al
  176. endm
  177.  
  178. H_Write macro
  179.   mov [YG_GP].H, al
  180. endm
  181.  
  182. L_Write macro
  183.   mov [YG_GP].L, al
  184. endm
  185.  
  186. A_Write macro
  187.   mov [YG_GP].A, al
  188. endm
  189.  
  190. SP_Write macro
  191.   mov [YG_GP].SP_, ax
  192. endm
  193.  
  194. DE_Write macro
  195.   mov [YG_GP].DE, ax
  196. endm
  197.  
  198. BC_Write macro
  199.   mov [YG_GP].BC, ax
  200. endm
  201.  
  202. HL_Write macro
  203.   mov [YG_GP].HL, ax
  204. endm
  205.  
  206. xImm16_WriteReg16 macro _Reg
  207.   mov cx, [YG_GP]._Reg
  208.   push ecx
  209.   push eax
  210.   push [YG_GP].GameBoyObj
  211.   call MmuWriteWord@8  
  212. endm
  213.  
  214. xImm16_WriteRegSP macro
  215.   mov cx, [YG_GP].SP_
  216.   push ecx
  217.   push eax
  218.   push [YG_GP].GameBoyObj
  219.   call MmuWriteWord@8  
  220. endm
  221.  
  222. xImm16_WriteRegA macro
  223.   mov cl, [YG_GP].A
  224.   push ecx
  225.   push eax
  226.   push [YG_GP].GameBoyObj
  227.   call MmuWrite@8  
  228. endm
  229.  
  230. xBC_Write macro
  231.   push eax
  232.   mov ax, [YG_GP].BC
  233.   push eax
  234.   push [YG_GP].GameBoyObj
  235.   call MmuWrite@8
  236. endm
  237.  
  238. xDE_Write macro
  239.   push eax
  240.   mov ax, [YG_GP].DE
  241.   push eax
  242.   push [YG_GP].GameBoyObj
  243.   call MmuWrite@8
  244. endm
  245.  
  246. xHL_Write macro
  247.   push eax
  248.   mov ax, [YG_GP].HL
  249.   push eax
  250.   push [YG_GP].GameBoyObj
  251.   call MmuWrite@8
  252. endm
  253.  
  254. xHL_Write_Inc macro
  255.   push eax
  256.   mov ax, [YG_GP].HL
  257.   push eax
  258.   push [YG_GP].GameBoyObj
  259.   call MmuWrite@8
  260.   add [YG_GP].HL, 1
  261. endm
  262.  
  263. xHL_Write_Dec macro
  264.   push eax
  265.   mov ax, [YG_GP].HL
  266.   push eax
  267.   push [YG_GP].GameBoyObj
  268.   call MmuWrite@8
  269.   sub [YG_GP].HL, 1
  270. endm
  271.  
  272. xSP_Write macro
  273.   push eax
  274.   mov ax, [YG_GP].SP
  275.   push eax
  276.   push [YG_GP].GameBoyObj
  277.   call MmuWrite@8
  278. endm
  279.  
  280.  
  281.  
  282.  
  283. ;;  Register access-read unwind
  284. B_Read macro
  285.   mov al, [YG_GP].B
  286. endm
  287.  
  288. C_Read macro
  289.   mov al, [YG_GP].C_
  290. endm
  291.  
  292. D_Read macro
  293.   mov al, [YG_GP].D
  294. endm
  295.  
  296. E_Read macro
  297.   mov al, [YG_GP].E
  298. endm
  299.  
  300. H_Read macro
  301.   mov al, [YG_GP].H
  302. endm
  303.  
  304. L_Read macro
  305.   mov al, [YG_GP].L
  306. endm
  307.  
  308. A_Read macro
  309.   mov al, [YG_GP].A
  310. endm
  311.  
  312. BC_Read macro
  313.   mov ax, [YG_GP].BC
  314. endm
  315. DE_Read macro
  316.   mov ax, [YG_GP].DE
  317. endm
  318. HL_Read macro
  319.   mov ax, [YG_GP].HL
  320. endm
  321. SP_Read macro
  322.   mov ax, [YG_GP].SP_
  323. endm
  324.  
  325. Imm8_Read macro
  326.   push    edx
  327.   push   [YG_GP].GameBoyObj
  328.   call    MmuRead@4
  329.   inc     edx
  330. endm
  331.  
  332. Read_BySpecRegister macro _Reg
  333.   push    _Reg
  334.   push   [YG_GP].GameBoyObj
  335.   call    MmuRead@4
  336.   inc     edx
  337. endm
  338.  
  339. Imm8Read_ExpandAddress16 macro
  340.   Imm8_Read
  341.   add eax, 0FF00h
  342. endm
  343.  
  344. C_ExpandAddress16 macro
  345.   mov al, [YG_GP].C_
  346.   add eax, 0FF00h
  347. endm
  348.  
  349. Imm8Read_ExpandAddress16_Fetch macro
  350.   Imm8Read_ExpandAddress16
  351.   Read_BySpecRegister eax
  352. endm
  353.  
  354. Imm16Read_Address_Fetch macro
  355.   Imm16_Read
  356.   Read_BySpecRegister eax
  357. endm
  358.  
  359. C_ExpandAddress16_Fetch macro
  360.   mov al, [YG_GP].C_
  361.   add eax, 0FF00h
  362.   Read_BySpecRegister eax
  363. endm
  364.  
  365.  
  366.  
  367. Imm16_Read macro
  368.   push    edx
  369.   push   [YG_GP].GameBoyObj
  370.   call    MmuReadWord@4
  371.   add     edx, 2
  372. endm
  373.  
  374. xBC_Read macro
  375.   mov ax, [YG_GP].BC
  376.   push eax
  377.   push [YG_GP].GameBoyObj
  378.   call MmuRead@4
  379. endm
  380.  
  381. xDE_Read macro
  382.   mov ax, [YG_GP].DE
  383.   push eax
  384.   push [YG_GP].GameBoyObj
  385.   call MmuRead@4
  386. endm
  387.  
  388.  
  389. xHL_Read macro
  390.   mov ax, [YG_GP].HL
  391.   push eax
  392.   push [YG_GP].GameBoyObj
  393.   call MmuRead@4
  394. endm
  395.  
  396. xHL_Read_Inc macro
  397.   mov ax, [YG_GP].HL
  398.   push eax
  399.   push [YG_GP].GameBoyObj
  400.   call MmuRead@4
  401.   add [YG_GP].HL, 1
  402. endm
  403.  
  404. xHL_Read_Dec macro
  405.   mov ax, [YG_GP].HL
  406.   push eax
  407.   push [YG_GP].GameBoyObj
  408.   call MmuRead@4
  409.   sub [YG_GP].HL, 1
  410. endm
  411.  
  412. xSP_Read macro
  413.   mov ax, [YG_GP].SP
  414.   push eax
  415.   push [YG_GP].GameBoyObj
  416.   call MmuRead@4
  417. endm
  418.  
  419. LD@Imm8 macro OpCase, Cycles_, WhoWrite
  420.  OpCase&:
  421.     FetchCurrentPC_ToEax_Inc
  422.     WhoWrite
  423.     SetCyclesAndRet Cycles_
  424. endm
  425.       LD@Imm8 OP06, 8,  B_Write ;; LD B Imm8, 2, Cycles:8
  426.       LD@Imm8 OP0E, 8,  C_Write ;; LD C Imm8, 2, Cycles:8
  427.       LD@Imm8 OP16, 8,  D_Write ;; LD D Imm8, 2, Cycles:8
  428.       LD@Imm8 OP1E, 8,  E_Write ;; LD E Imm8, 2, Cycles:8
  429.       LD@Imm8 OP26, 8,  H_Write ;; LD H Imm8, 2, Cycles:8
  430.       LD@Imm8 OP2E, 8,  L_Write ;; LD L Imm8, 2, Cycles:8
  431.       LD@Imm8 OP36,12,  xHL_Write ;; LD xHL Imm8, 2, Cycles:8
  432.       LD@Imm8 OP3E, 8,  A_Write ;; LD A Imm8, 2, Cycles:8
  433.    
  434. LD@Imm16 macro OpCase, Cycles_, WhoRegister
  435.  OpCase&:
  436.     FetchCurrentPC_ToEax_Word_Inc
  437.     mov [YG_GP].&WhoRegister, ax
  438.     SetCyclesAndRet Cycles_
  439. endm    
  440.       LD@Imm16 OP01, 12, BC ;; LD BC Imm16, 3 Cycles:12
  441.       LD@Imm16 OP11, 12, DE ;; LD DE Imm16, 3 Cycles:12    
  442.       LD@Imm16 OP21, 12, HL ;; LD HL Imm16, 3 Cycles:12    
  443.       LD@Imm16 OP31, 12, SP_ ;; LD SP Imm16, 3 Cycles:12      
  444.  
  445. LD@RxHLToRxHL macro OpCase, Cycles_, WhoLoad, WhoWrite
  446.  OpCase&:
  447.     WhoLoad
  448.     WhoWrite
  449.     SetCyclesAndRet Cycles_
  450. endm      
  451.       LD@RxHLToRxHL OP40, 4, B_Read, B_Write ;; LD B B, 1 Cycles:4
  452.       LD@RxHLToRxHL OP41, 4, C_Read, B_Write ;; LD B C, 1 Cycles:4
  453.       LD@RxHLToRxHL OP42, 4, D_Read, B_Write ;; LD B D, 1 Cycles:4
  454.       LD@RxHLToRxHL OP43, 4, E_Read, B_Write ;; LD B E, 1 Cycles:4
  455.       LD@RxHLToRxHL OP44, 4, H_Read, B_Write ;; LD B H, 1 Cycles:4
  456.       LD@RxHLToRxHL OP45, 4, L_Read, B_Write ;; LD B L, 1 Cycles:4
  457.       LD@RxHLToRxHL OP46, 8, xHL_Read, B_Write ;; LD B xHL, 1 Cycles:8
  458.       LD@RxHLToRxHL OP47, 4, A_Read, B_Write ;; LD B A, 1 Cycles:4  
  459.      
  460.       LD@RxHLToRxHL OP48, 4, B_Read, C_Write ;; LD C B, 1 Cycles:4
  461.       LD@RxHLToRxHL OP49, 4, C_Read, C_Write ;; LD C C, 1 Cycles:4
  462.       LD@RxHLToRxHL OP4A, 4, D_Read, C_Write ;; LD C D, 1 Cycles:4
  463.       LD@RxHLToRxHL OP4B, 4, E_Read, C_Write ;; LD C E, 1 Cycles:4
  464.       LD@RxHLToRxHL OP4C, 4, H_Read, C_Write ;; LD C H, 1 Cycles:4
  465.       LD@RxHLToRxHL OP4D, 4, L_Read, C_Write ;; LD C L, 1 Cycles:4
  466.       LD@RxHLToRxHL OP4E, 8, xHL_Read, C_Write ;; LD C xHL, 1 Cycles:8
  467.       LD@RxHLToRxHL OP4F, 4, A_Read, C_Write ;; LD C A, 1 Cycles:4  
  468.  
  469.       LD@RxHLToRxHL OP50, 4, B_Read, D_Write ;; LD D B, 1 Cycles:4
  470.       LD@RxHLToRxHL OP51, 4, C_Read, D_Write ;; LD D C, 1 Cycles:4
  471.       LD@RxHLToRxHL OP52, 4, D_Read, D_Write ;; LD D D, 1 Cycles:4
  472.       LD@RxHLToRxHL OP53, 4, E_Read, D_Write ;; LD D E, 1 Cycles:4
  473.       LD@RxHLToRxHL OP54, 4, H_Read, D_Write ;; LD D H, 1 Cycles:4
  474.       LD@RxHLToRxHL OP55, 4, L_Read, D_Write ;; LD D L, 1 Cycles:4
  475.       LD@RxHLToRxHL OP56, 8, xHL_Read, D_Write ;; LD D xHL, 1 Cycles:8
  476.       LD@RxHLToRxHL OP57, 4, A_Read, D_Write ;; LD D A, 1 Cycles:4  
  477.      
  478.       LD@RxHLToRxHL OP58, 4, B_Read, E_Write ;; LD E B, 1 Cycles:4
  479.       LD@RxHLToRxHL OP59, 4, C_Read, E_Write ;; LD E C, 1 Cycles:4
  480.       LD@RxHLToRxHL OP5A, 4, D_Read, E_Write ;; LD E D, 1 Cycles:4
  481.       LD@RxHLToRxHL OP5B, 4, E_Read, E_Write ;; LD E E, 1 Cycles:4
  482.       LD@RxHLToRxHL OP5C, 4, H_Read, E_Write ;; LD E H, 1 Cycles:4
  483.       LD@RxHLToRxHL OP5D, 4, L_Read, E_Write ;; LD E L, 1 Cycles:4
  484.       LD@RxHLToRxHL OP5E, 8, xHL_Read, E_Write ;; LD E xHL, 1 Cycles:8
  485.       LD@RxHLToRxHL OP5F, 4, A_Read, E_Write ;; LD E A, 1 Cycles:4  
  486.  
  487.       LD@RxHLToRxHL OP60, 4, B_Read, H_Write ;; LD H B, 1 Cycles:4
  488.       LD@RxHLToRxHL OP61, 4, C_Read, H_Write ;; LD H C, 1 Cycles:4
  489.       LD@RxHLToRxHL OP62, 4, D_Read, H_Write ;; LD H D, 1 Cycles:4
  490.       LD@RxHLToRxHL OP63, 4, E_Read, H_Write ;; LD H E, 1 Cycles:4
  491.       LD@RxHLToRxHL OP64, 4, H_Read, H_Write ;; LD H H, 1 Cycles:4
  492.       LD@RxHLToRxHL OP65, 4, L_Read, H_Write ;; LD H L, 1 Cycles:4
  493.       LD@RxHLToRxHL OP66, 8, xHL_Read, H_Write ;; LD H xHL, 1 Cycles:8
  494.       LD@RxHLToRxHL OP67, 4, A_Read, H_Write ;; LD H A, 1 Cycles:4  
  495.      
  496.       LD@RxHLToRxHL OP68, 4, B_Read, L_Write ;; LD L B, 1 Cycles:4
  497.       LD@RxHLToRxHL OP69, 4, C_Read, L_Write ;; LD L C, 1 Cycles:4
  498.       LD@RxHLToRxHL OP6A, 4, D_Read, L_Write ;; LD L D, 1 Cycles:4
  499.       LD@RxHLToRxHL OP6B, 4, E_Read, L_Write ;; LD L E, 1 Cycles:4
  500.       LD@RxHLToRxHL OP6C, 4, H_Read, L_Write ;; LD L H, 1 Cycles:4
  501.       LD@RxHLToRxHL OP6D, 4, L_Read, L_Write ;; LD L L, 1 Cycles:4
  502.       LD@RxHLToRxHL OP6E, 8, xHL_Read, L_Write ;; LD L xHL, 1 Cycles:8
  503.       LD@RxHLToRxHL OP6F, 4, A_Read, L_Write ;; LD L A, 1 Cycles:4  
  504.        
  505.       LD@RxHLToRxHL OP70, 8, B_Read, xHL_Write ;; LD xHL B, 1 Cycles:8
  506.       LD@RxHLToRxHL OP71, 8, C_Read, xHL_Write ;; LD xHL C, 1 Cycles:8
  507.       LD@RxHLToRxHL OP72, 8, D_Read, xHL_Write ;; LD xHL D, 1 Cycles:8
  508.       LD@RxHLToRxHL OP73, 8, E_Read, xHL_Write ;; LD xHL E, 1 Cycles:8
  509.       LD@RxHLToRxHL OP74, 8, H_Read, xHL_Write ;; LD xHL H, 1 Cycles:8
  510.       LD@RxHLToRxHL OP75, 8, L_Read, xHL_Write ;; LD xHL L, 1 Cycles:8
  511.       ;; LD@RxHLToRxHL OP76, 8, xHL_Read, xHL_Write ;; LD xHL xHL, 1 Cycles:8
  512.       LD@RxHLToRxHL OP02, 8, A_Read, xBC_Write ;; LD xBC A, 1 Cycles:8    
  513.       LD@RxHLToRxHL OP12, 8, A_Read, xDE_Write ;; LD xDE A, 1 Cycles:8    
  514.       LD@RxHLToRxHL OP77, 8, A_Read, xHL_Write ;; LD xHL A, 1 Cycles:8    
  515.       LD@RxHLToRxHL OP22, 8, A_Read, xHL_Write_Inc;; LD xHL++ A, 1 Cycles:8  
  516.       LD@RxHLToRxHL OP32, 8, A_Read, xHL_Write_Dec ;; LD xHL-- A, 1 Cycles:8  
  517.        
  518.       LD@RxHLToRxHL OP78, 4, B_Read, A_Write ;; LD A B, 1 Cycles:4
  519.       LD@RxHLToRxHL OP79, 4, C_Read, A_Write ;; LD A C, 1 Cycles:4
  520.       LD@RxHLToRxHL OP7A, 4, D_Read, A_Write ;; LD A D, 1 Cycles:4
  521.       LD@RxHLToRxHL OP7B, 4, E_Read, A_Write ;; LD A E, 1 Cycles:4
  522.       LD@RxHLToRxHL OP7C, 4, H_Read, A_Write ;; LD A H, 1 Cycles:4
  523.       LD@RxHLToRxHL OP7D, 4, L_Read, A_Write ;; LD A L, 1 Cycles:4
  524.       LD@RxHLToRxHL OP0A, 8, xBC_Read, A_Write ;; LD A xBC, 1 Cycles:8
  525.       LD@RxHLToRxHL OP1A, 8, xDE_Read, A_Write ;; LD A xDE, 1 Cycles:8
  526.       LD@RxHLToRxHL OP7E, 8, xHL_Read, A_Write ;; LD A xHL, 1 Cycles:8
  527.       LD@RxHLToRxHL OP2A, 8, xHL_Read_Inc, A_Write ;; LD A xHL++, 1 Cycles:8
  528.       LD@RxHLToRxHL OP3A, 8, xHL_Read_Dec, A_Write ;; LD A xHL--, 1 Cycles:8
  529.       LD@RxHLToRxHL OP7F, 4, A_Read, A_Write ;; LD A A, 1 Cycles:4      
  530. ;; MISC LD
  531.       LD@RxHLToRxHL OP08,20, Imm16_Read, xImm16_WriteRegSP ;; LD (Imm16) SP, 3 Cycles:20
  532.       LD@RxHLToRxHL OPEA,16, Imm16_Read, xImm16_WriteRegA ;; LD (Imm16) A, 3 Cycles:16
  533.       LD@RxHLToRxHL OPE0,12, Imm8Read_ExpandAddress16, xImm16_WriteRegA ;; LD (Imm8+0FF00h) A, 2 Cycles:12
  534.       LD@RxHLToRxHL OPE2, 8, C_ExpandAddress16, xImm16_WriteRegA ;; LD (C+0FF00h) A, 2 Cycles:8  
  535.       LD@RxHLToRxHL OPF0,12, Imm8Read_ExpandAddress16_Fetch, A_Write ;; LD A, (Imm8+0FF00h)  2 Cycles:12
  536.       LD@RxHLToRxHL OPF2, 8, C_ExpandAddress16_Fetch, A_Write ;; LD A, (C+0FF00h) 2 Cycles:8    
  537.       LD@RxHLToRxHL OPFA,16, Imm16Read_Address_Fetch, A_Write ;; LD A, (Imm16) 3 Cycles:16
  538.       LD@RxHLToRxHL OPF9, 8, HL_Read, SP_Write ;; LD SP HL 1 Cycles:8
  539.      
  540.       OPF8: ;; LD HL SP+Imm8(sign8) 2 Cycles:12
  541.       Imm8_Read
  542.      
  543.       ;; Clear Reg-f
  544.       xor YG_PF, YG_PF
  545.       xor edx, edx
  546.       ;; ext sign
  547.       movsx ax, al
  548.       mov cx, [YG_GP].SP_
  549.       and ecx, 0FFFFh
  550.       and eax, 0FFFFh
  551.       lea edx, [ecx+eax]
  552.       ;; SetH
  553.       mov [YG_GP].HL, dx
  554.       xor cx, ax
  555.       mov ax, dx
  556.       xor cx, ax
  557.       and cx, 01000h
  558.       shr cx, 8
  559.       or YG_PF, ecx
  560.       ;; SetC
  561.       and dx, 010000h
  562.       shr dx, 16
  563.       or YG_PF, edx
  564.       SetCyclesRetP 12
  565.      
  566.       ;; ALU, LOGIC 0x8x- 0xBx---------------------------------------------------------------------------------------
  567.  
  568. Add_base macro atomic_it, Cycles
  569. ;; source <- eax
  570. ;; target <- always register A
  571.  
  572. ;; clear psb .
  573.   xor YG_PF, YG_PF
  574.   movzx edx, [YG_GP].A
  575.   and eax, 0FFh
  576.   lea ecx, [eax+edx+atomic_it]
  577.   ;; always write back A.
  578.   mov [YG_GP].A, cl
  579.  
  580.   ;; SetH
  581.   xor dx, ax  
  582.   mov ax, cx
  583.   xor ax, dx
  584.   and ax, 010h
  585.   or YG_PF, eax
  586.   ;; SetC
  587.   or YG_PF_8, ch
  588.   ;; SetZ  XXX:ZTable
  589.   test cl, cl
  590.   setz cl
  591.   shl ecx, 6
  592.   or YG_PF, ecx
  593. endm
  594.      
  595. Sub_base macro atomic_it, Cycles, Register ;; [YG_GP].A || cl for cmp opcode
  596. ;; source <- eax
  597. ;; target <- always register A
  598.  
  599. ;; clear psb .
  600.   mov YG_PF, N_FLAG
  601.   movzx edx, [YG_GP].A
  602.   and eax, 0FFh
  603.   mov ecx, edx
  604.   sub ecx, eax
  605.   sub ecx, atomic_it
  606.   and ecx, 0FFFFh  
  607.   ;; always write back A. or nodone
  608.   mov Register, cl
  609.   ;; SetH
  610.   xor dx, ax  
  611.   mov ax, cx
  612.   xor ax, dx
  613.   and ax, 010h
  614.   or YG_PF, eax
  615.   ;; SetC
  616.   mov edx, ecx
  617.   shr edx, 15
  618.   or YG_PF_8, dl
  619.   ;; SetZ  XXX:ZTable
  620.   test cl, cl
  621.   setz cl
  622.   shl ecx, 6
  623.   or YG_PF, ecx
  624. endm
  625.      
  626. ;; XOR | OR | AND do unwind base .
  627. Logic_base macro   Cycles, initFlags, LogicOp
  628. ;; source <- eax
  629. ;; target <- always register A
  630.  
  631. ;; clear psb .
  632.   mov YG_PF, initFlags
  633.   movzx edx, [YG_GP].A
  634.   LogicOp eax, edx
  635.   ;; always write back A.
  636.   mov [YG_GP].A, al
  637.  
  638.   ;; SetZ  XXX:ZTable
  639.   test al, al
  640.   setz al
  641.   shl eax, 6
  642.   or YG_PF, eax
  643. endm  
  644.      
  645. ;; unwind
  646. Add_ macro Cycles
  647.   Add_base 0, Cycles
  648. endm
  649.  
  650. Adc_ macro Cycles
  651.   Add_base 1, Cycles
  652. endm
  653.  
  654. Sub_ macro Cycles
  655.   Sub_base 0, Cycles, [YG_GP].A
  656. endm  
  657.      
  658. Sbc_ macro Cycles
  659.   Sub_base 1, Cycles, [YG_GP].A
  660. endm      
  661.  
  662. Cmp_ macro Cycles
  663.   Sub_base 0, Cycles, cl
  664. endm  
  665.      
  666. And_ macro Cycles
  667.   Logic_base Cycles, H_FLAG, and
  668. endm  
  669.      
  670. Xor_ macro Cycles
  671.   Logic_base Cycles, 0, xor
  672. endm      
  673.  
  674. Or_ macro Cycles
  675.   Logic_base Cycles, 0, or
  676. endm      
  677.  
  678. AddWord_  macro
  679. ;; source <- eax
  680. ;; target <- always register HL
  681.  
  682. ;; clear psb . save old Z
  683.   and YG_PF, Z_FLAG
  684.   movzx ecx, [YG_GP].HL
  685.   and eax, 0FFFFh
  686.   lea edx, [eax+ecx]
  687.   ;; always write back A.
  688.   mov [YG_GP].HL, dx
  689.   ;; SetH
  690.   xor cx, ax
  691.   mov ax, dx
  692.   xor cx, ax
  693.   and cx, 01000h
  694.   shr cx, 8
  695.   or YG_PF, ecx
  696.   ;; SetC
  697.   and dx, 010000h
  698.   shr dx, 16
  699.   or YG_PF, edx
  700. endm
  701.  
  702. DecWord_  macro
  703.   dec eax
  704. endm
  705.  
  706. IncWord_  macro
  707.   inc eax
  708. endm
  709.  
  710. Inc_  macro  ;; !!!!!!!!!!!!!!!!!!!!!!!
  711. ;; source <- eax
  712. ;; clear psb . save old Z
  713.   and YG_PF, C_FLAG
  714.   and eax, 0FFh
  715.   lea edx, [eax+1]
  716.   mov ecx, edx
  717.  
  718.   ;; SetH
  719.   xor cx, ax
  720.   and cx, 010h
  721.   or YG_PF, ecx
  722.  
  723.   mov eax, edx
  724.   test dl, dl
  725.   setz dl
  726.   shl dl, 6
  727.   or YG_P, edx
  728. endm
  729.  
  730. Dec_  macro  ;; !!!!!!!!!!!!!!!!!!!!!!!
  731. ;; source <- eax
  732. ;; clear psb . save old Z
  733.   and YG_PF, C_FLAG
  734.   or YG_PF, N_FLAG
  735.   and eax, 0FFh
  736.   lea edx, [eax-1]
  737.   mov ecx, edx
  738.  
  739.   ;; SetH
  740.   xor cx, ax
  741.   and cx, 010h
  742.   or YG_PF, ecx
  743.  
  744.   mov eax, edx
  745.   test dl, dl
  746.   setz dl
  747.   shl dl, 6
  748.   or YG_P, edx
  749. endm
  750.  
  751. ;; !!! Include OP, imm8 and ADD Word Register.
  752. Opcode@MainALU  macro  Opcode, Cycles, whoRead, Op, whoWrite
  753.   Opcode&:
  754.     whoRead
  755.     Op
  756.     ;; whoWrite
  757.     SetCyclesRetP Cycles
  758. endm
  759.       Opcode@MainALU  OP80, 4, B_Read, Add_, A_Write ;; ADD A, B  1 Cycles:4
  760.       Opcode@MainALU  OP81, 4, C_Read, Add_, A_Write ;; ADD A, C  1 Cycles:4    
  761.       Opcode@MainALU  OP82, 4, D_Read, Add_, A_Write ;; ADD A, D  1 Cycles:4
  762.       Opcode@MainALU  OP83, 4, E_Read, Add_, A_Write ;; ADD A, E  1 Cycles:4      
  763.       Opcode@MainALU  OP84, 4, H_Read, Add_, A_Write ;; ADD A, H  1 Cycles:4
  764.       Opcode@MainALU  OP85, 4, L_Read, Add_, A_Write ;; ADD A, L  1 Cycles:4    
  765.       Opcode@MainALU  OP86, 8, xHL_Read, Add_, A_Write ;; ADD A, xHL  1 Cycles:8
  766.       Opcode@MainALU  OP87, 4, A_Read, Add_, A_Write ;; ADD A, A  1 Cycles:4  
  767.       Opcode@MainALU  OPC6, 8, Imm8_Read, Add_, A_Write ;; ADD A, Imm8  2 Cycles:8
  768.       Opcode@MainALU  OP09, 8, BC_Read, AddWord_, A_Write ;; ADD HL, BC  1 Cycles:8    
  769.       Opcode@MainALU  OP19, 8, DE_Read, AddWord_, A_Write ;; ADD HL, DE  1 Cycles:8    
  770.       Opcode@MainALU  OP29, 8, HL_Read, AddWord_, A_Write ;; ADD HL, HL  1 Cycles:8    
  771.       Opcode@MainALU  OP39, 8, SP_Read, AddWord_, A_Write ;; ADD HL, SP  1 Cycles:8    
  772.    
  773.       Opcode@MainALU  OP88, 4, B_Read, Adc_, A_Write ;; ADC A, B  1 Cycles:4
  774.       Opcode@MainALU  OP89, 4, C_Read, Adc_, A_Write ;; ADC A, C  1 Cycles:4    
  775.       Opcode@MainALU  OP8A, 4, D_Read, Adc_, A_Write ;; ADC A, D  1 Cycles:4
  776.       Opcode@MainALU  OP8B, 4, E_Read, Adc_, A_Write ;; ADC A, E  1 Cycles:4      
  777.       Opcode@MainALU  OP8C, 4, H_Read, Adc_, A_Write ;; ADC A, H  1 Cycles:4
  778.       Opcode@MainALU  OP8D, 4, L_Read, Adc_, A_Write ;; ADC A, L  1 Cycles:4    
  779.       Opcode@MainALU  OP8E, 8, xHL_Read, Adc_, A_Write ;; ADC A, xHL  1 Cycles:8
  780.       Opcode@MainALU  OP8F, 4, A_Read, Adc_, A_Write ;; ADC A, A  1 Cycles:4  
  781.       Opcode@MainALU  OPCE, 8, Imm8_Read, Adc_, A_Write ;; ADC A, Imm8  2 Cycles:8    
  782.      
  783.       Opcode@MainALU  OP03, 8, BC_Read, IncWord_, BC_Write ;; INC BC  Cycles:8
  784.       Opcode@MainALU  OP13, 8, DE_Read, IncWord_, DE_Write ;; INC DE  Cycles:8
  785.       Opcode@MainALU  OP23, 8, HL_Read, IncWord_, HL_Write ;; INC HL  Cycles:8
  786.       Opcode@MainALU  OP33, 8, SP_Read, IncWord_, SP_Write ;; INC SP  Cycles:8
  787.      
  788.       Opcode@MainALU  OP04, 4, B_Read, Inc_, B_Write ;; INC B  1 Cycles:4
  789.       Opcode@MainALU  OP14, 4, C_Read, Inc_, C_Write ;; INC C  1 Cycles:4    
  790.       Opcode@MainALU  OP24, 4, D_Read, Inc_, D_Write ;; INC D  1 Cycles:4
  791.       Opcode@MainALU  OP34, 4, E_Read, Inc_, E_Write ;; INC E  1 Cycles:4      
  792.       Opcode@MainALU  OP0C, 4, H_Read, Inc_, H_Write ;; INC H  1 Cycles:4
  793.       Opcode@MainALU  OP1C, 4, L_Read, Inc_, L_Write ;; INC L  1 Cycles:4    
  794.       Opcode@MainALU  OP2C,12, xHL_Read, Inc_, xHL_Write ;; INC xHL  1 Cycles:12
  795.       Opcode@MainALU  OP3C, 4, A_Read, Inc_, A_Write ;; INC A  1 Cycles:4      
  796.      
  797.       Opcode@MainALU  OP90, 4, B_Read, Sub_, A_Write ;; SUB A, B  1 Cycles:4
  798.       Opcode@MainALU  OP91, 4, C_Read, Sub_, A_Write ;; SUB A, C  1 Cycles:4    
  799.       Opcode@MainALU  OP92, 4, D_Read, Sub_, A_Write ;; SUB A, D  1 Cycles:4
  800.       Opcode@MainALU  OP93, 4, E_Read, Sub_, A_Write ;; SUB A, E  1 Cycles:4      
  801.       Opcode@MainALU  OP94, 4, H_Read, Sub_, A_Write ;; SUB A, H  1 Cycles:4
  802.       Opcode@MainALU  OP95, 4, L_Read, Sub_, A_Write ;; SUB A, L  1 Cycles:4    
  803.       Opcode@MainALU  OP96, 8, xHL_Read, Sub_, A_Write ;; SUB A, xHL  1 Cycles:8
  804.       Opcode@MainALU  OP97, 4, A_Read, Sub_, A_Write ;; SUB A, A  1 Cycles:4  
  805.       Opcode@MainALU  OPD6, 8, Imm8_Read, Sub_, A_Write ;; SUB A, Imm8  2 Cycles:8
  806.      
  807.       Opcode@MainALU  OP98, 4, B_Read, Sbc_, A_Write ;; SBC A, B  1 Cycles:4
  808.       Opcode@MainALU  OP99, 4, C_Read, Sbc_, A_Write ;; SBC A, C  1 Cycles:4    
  809.       Opcode@MainALU  OP9A, 4, D_Read, Sbc_, A_Write ;; SBC A, D  1 Cycles:4
  810.       Opcode@MainALU  OP9B, 4, E_Read, Sbc_, A_Write ;; SBC A, E  1 Cycles:4      
  811.       Opcode@MainALU  OP9C, 4, H_Read, Sbc_, A_Write ;; SBC A, H  1 Cycles:4
  812.       Opcode@MainALU  OP9D, 4, L_Read, Sbc_, A_Write ;; SBC A, L  1 Cycles:4    
  813.       Opcode@MainALU  OP9E, 8, xHL_Read, Sbc_, A_Write ;; SBC A, xHL  1 Cycles:8
  814.       Opcode@MainALU  OP9F, 4, A_Read, Sbc_, A_Write ;; SBC A, A  1 Cycles:4  
  815.       Opcode@MainALU  OPDE, 8, Imm8_Read, Sbc_, A_Write ;; SBC A, Imm8  2 Cycles:8
  816.    
  817.       Opcode@MainALU  OP0B, 8, BC_Read, IncWord_, BC_Write ;; DEC BC  Cycles:8
  818.       Opcode@MainALU  OP1B, 8, DE_Read, IncWord_, DE_Write ;; DEC DE  Cycles:8
  819.       Opcode@MainALU  OP2B, 8, HL_Read, IncWord_, HL_Write ;; DEC HL  Cycles:8
  820.       Opcode@MainALU  OP3B, 8, SP_Read, IncWord_, SP_Write ;; DEC SP  Cycles:8
  821.      
  822.       Opcode@MainALU  OP05, 4, B_Read, Dec_, B_Write ;; DEC B  1 Cycles:4
  823.       Opcode@MainALU  OP15, 4, C_Read, Dec_, C_Write ;; DEC C  1 Cycles:4    
  824.       Opcode@MainALU  OP25, 4, D_Read, Dec_, D_Write ;; DEC D  1 Cycles:4
  825.       Opcode@MainALU  OP35, 4, E_Read, Dec_, E_Write ;; DEC E  1 Cycles:4      
  826.       Opcode@MainALU  OP0D, 4, H_Read, Dec_, H_Write ;; DEC H  1 Cycles:4
  827.       Opcode@MainALU  OP1D, 4, L_Read, Dec_, L_Write ;; DEC L  1 Cycles:4    
  828.       Opcode@MainALU  OP2D,12, xHL_Read, Dec_, xHL_Write ;; DEC xHL  1 Cycles:12
  829.       Opcode@MainALU  OP3D, 4, A_Read, Dec_, A_Write ;; DEC A  1 Cycles:4    
  830.      
  831.       Opcode@MainALU  OPA0, 4, B_Read, And_, A_Write ;; AND A, B  1 Cycles:4
  832.       Opcode@MainALU  OPA1, 4, C_Read, And_, A_Write ;; AND A, C  1 Cycles:4    
  833.       Opcode@MainALU  OPA2, 4, D_Read, And_, A_Write ;; AND A, D  1 Cycles:4
  834.       Opcode@MainALU  OPA3, 4, E_Read, And_, A_Write ;; AND A, E  1 Cycles:4      
  835.       Opcode@MainALU  OPA4, 4, H_Read, And_, A_Write ;; AND A, H  1 Cycles:4
  836.       Opcode@MainALU  OPA5, 4, L_Read, And_, A_Write ;; AND A, L  1 Cycles:4    
  837.       Opcode@MainALU  OPA6, 8, xHL_Read, And_, A_Write ;; AND A, xHL  1 Cycles:8
  838.       Opcode@MainALU  OPA7, 4, A_Read, And_, A_Write ;; AND A, A  1 Cycles:4  
  839.       Opcode@MainALU  OPE6, 8, Imm8_Read, Add_, A_Write ;; AND A, Imm8  2 Cycles:8
  840.        
  841.       Opcode@MainALU  OPA8, 4, B_Read, Xor_, A_Write ;; XOR A, B  1 Cycles:4
  842.       Opcode@MainALU  OPA9, 4, C_Read, Xor_, A_Write ;; XOR A, C  1 Cycles:4    
  843.       Opcode@MainALU  OPAA, 4, D_Read, Xor_, A_Write ;; XOR A, D  1 Cycles:4
  844.       Opcode@MainALU  OPAB, 4, E_Read, Xor_, A_Write ;; XOR A, E  1 Cycles:4      
  845.       Opcode@MainALU  OPAC, 4, H_Read, Xor_, A_Write ;; XOR A, H  1 Cycles:4
  846.       Opcode@MainALU  OPAD, 4, L_Read, Xor_, A_Write ;; XOR A, L  1 Cycles:4    
  847.       Opcode@MainALU  OPAE, 8, xHL_Read, Xor_, A_Write ;; XOR A, xHL  1 Cycles:8
  848.       Opcode@MainALU  OPAF, 4, A_Read, Xor_, A_Write ;; XOR A, A  1 Cycles:4  
  849.       Opcode@MainALU  OPEE, 8, Imm8_Read, Xor_, A_Write ;; XOR A, Imm8  2 Cycles:8
  850.      
  851.       Opcode@MainALU  OPB0, 4, B_Read, Or_, A_Write ;; OR A, B  1 Cycles:4
  852.       Opcode@MainALU  OPB1, 4, C_Read, Or_, A_Write ;; OR A, C  1 Cycles:4    
  853.       Opcode@MainALU  OPB2, 4, D_Read, Or_, A_Write ;; OR A, D  1 Cycles:4
  854.       Opcode@MainALU  OPB3, 4, E_Read, Or_, A_Write ;; OR A, E  1 Cycles:4      
  855.       Opcode@MainALU  OPB4, 4, H_Read, Or_, A_Write ;; OR A, H  1 Cycles:4
  856.       Opcode@MainALU  OPB5, 4, L_Read, Or_, A_Write ;; OR A, L  1 Cycles:4    
  857.       Opcode@MainALU  OPB6, 8, xHL_Read, Or_, A_Write ;; OR A, xHL  1 Cycles:8
  858.       Opcode@MainALU  OPB7, 4, A_Read, Or_, A_Write ;; OR A, A  1 Cycles:4  
  859.       Opcode@MainALU  OPF6, 8, Imm8_Read, Or_, A_Write ;; OR A, Imm8  2 Cycles:8
  860.      
  861.       Opcode@MainALU  OPB8, 4, B_Read, Cmp_, A_Write ;; CP A, B  1 Cycles:4
  862.       Opcode@MainALU  OPB9, 4, C_Read, Cmp_, A_Write ;; CP A, C  1 Cycles:4    
  863.       Opcode@MainALU  OPBA, 4, D_Read, Cmp_, A_Write ;; CP A, D  1 Cycles:4
  864.       Opcode@MainALU  OPBB, 4, E_Read, Cmp_, A_Write ;; CP A, E  1 Cycles:4      
  865.       Opcode@MainALU  OPBC, 4, H_Read, Cmp_, A_Write ;; CP A, H  1 Cycles:4
  866.       Opcode@MainALU  OPBD, 4, L_Read, Cmp_, A_Write ;; CP A, L  1 Cycles:4    
  867.       Opcode@MainALU  OPBE, 8, xHL_Read, Cmp_, A_Write ;; CP A, xHL  1 Cycles:8
  868.       Opcode@MainALU  OPBF, 4, A_Read, Cmp_, A_Write ;; CP A, A  1 Cycles:4  
  869.       Opcode@MainALU  OPFE, 8, Imm8_Read, Cmp_, A_Write ;; CP A, Imm8  2 Cycles:8
  870.      
  871. V_EXIT:
  872.       pop esi
  873.       pop YG_GP
  874.       pop ebx
  875.       ret
  876.        
  877.        
  878.        
  879.        
  880.        
  881.        
  882.        
  883.        
  884.        
  885.        
  886.        
  887.        
  888.        
  889.        
  890.        
  891.        
  892.  
  893.     int 3
  894.         align 16
  895. OPTAB   dd  OP00, OP01, OP02, OP03, OP04, OP05, OP06, OP07, OP08, OP09, OP0A, OP0B, OP0C, OP0D, OP0E, OP0F
  896.         dd  OP10, OP11, OP12, OP13, OP14, OP15, OP16, OP17, OP18, OP19, OP1A, OP1B, OP1C, OP1D, OP1E, OP1F
  897.         dd  OP20, OP21, OP22, OP23, OP24, OP25, OP26, OP27, OP28, OP29, OP2A, OP2B, OP2C, OP2D, OP2E, OP2F
  898.         dd  OP30, OP31, OP32, OP33, OP34, OP35, OP36, OP37, OP38, OP39, OP3A, OP3B, OP3C, OP3D, OP3E, OP3F
  899.         dd  OP40, OP41, OP42, OP43, OP44, OP45, OP46, OP47, OP48, OP49, OP4A, OP4B, OP4C, OP4D, OP4E, OP4F
  900.         dd  OP50, OP51, OP52, OP53, OP54, OP55, OP56, OP57, OP58, OP59, OP5A, OP5B, OP5C, OP5D, OP5E, OP5F
  901.         dd  OP60, OP61, OP62, OP63, OP64, OP65, OP66, OP67, OP68, OP69, OP6A, OP6B, OP6C, OP6D, OP6E, OP6F
  902.         dd  OP70, OP71, OP72, OP73, OP74, OP75, OP76, OP77, OP78, OP79, OP7A, OP7B, OP7C, OP7D, OP7E, OP7F
  903.         dd  OP80, OP81, OP82, OP83, OP84, OP85, OP86, OP87, OP88, OP89, OP8A, OP8B, OP8C, OP8D, OP8E, OP8F
  904.         dd  OP90, OP91, OP92, OP93, OP94, OP95, OP96, OP97, OP98, OP99, OP9A, OP9B, OP9C, OP9D, OP9E, OP9F
  905.         dd  OPA0, OPA1, OPA2, OPA3, OPA4, OPA5, OPA6, OPA7, OPA8, OPA9, OPAA, OPAB, OPAC, OPAD, OPAE, OPAF
  906.         dd  OPB0, OPB1, OPB2, OPB3, OPB4, OPB5, OPB6, OPB7, OPB8, OPB9, OPBA, OPBB, OPBC, OPBD, OPBE, OPBF
  907.         dd  OPC0, OPC1, OPC2, OPC3, OPC4, OPC5, OPC6, OPC7, OPC8, OPC9, OPCA, OPCB, OPCC, OPCD, OPCE, OPCF
  908.         dd  OPD0, OPD1, OPD2, OPD3, OPD4, OPD5, OPD6, OPD7, OPD8, OPD9, OPDA, OPDB, OPDC, OPDD, OPDE, OPDF
  909.         dd  OPE0, OPE1, OPE2, OPE3, OPE4, OPE5, OPE6, OPE7, OPE8, OPE9, OPEA, OPEB, OPEC, OPED, OPEE, OPEF
  910.         dd  OPF0, OPF1, OPF2, OPF3, OPF4, OPF5, OPF6, OPF7, OPF8, OPF9, OPFA, OPFB, OPFC, OPFD, OPFE, OPFF
  911.         align 16
  912. CBTAB   dd  CB00, CB01, CB02, CB03, CB04, CB05, CB06, CB07, CB08, CB09, CB0A, CB0B, CB0C, CB0D, CB0E, CB0F
  913.         dd  CB10, CB11, CB12, CB13, CB14, CB15, CB16, CB17, CB18, CB19, CB1A, CB1B, CB1C, CB1D, CB1E, CB1F
  914.         dd  CB20, CB21, CB22, CB23, CB24, CB25, CB26, CB27, CB28, CB29, CB2A, CB2B, CB2C, CB2D, CB2E, CB2F
  915.         dd  CB30, CB31, CB32, CB33, CB34, CB35, CB36, CB37, CB38, CB39, CB3A, CB3B, CB3C, CB3D, CB3E, CB3F
  916.         dd  CB40, CB41, CB42, CB43, CB44, CB45, CB46, CB47, CB48, CB49, CB4A, CB4B, CB4C, CB4D, CB4E, CB4F
  917.         dd  CB50, CB51, CB52, CB53, CB54, CB55, CB56, CB57, CB58, CB59, CB5A, CB5B, CB5C, CB5D, CB5E, CB5F
  918.         dd  CB60, CB61, CB62, CB63, CB64, CB65, CB66, CB67, CB68, CB69, CB6A, CB6B, CB6C, CB6D, CB6E, CB6F
  919.         dd  CB70, CB71, CB72, CB73, CB74, CB75, CB76, CB77, CB78, CB79, CB7A, CB7B, CB7C, CB7D, CB7E, CB7F
  920.         dd  CB80, CB81, CB82, CB83, CB84, CB85, CB86, CB87, CB88, CB89, CB8A, CB8B, CB8C, CB8D, CB8E, CB8F
  921.         dd  CB90, CB91, CB92, CB93, CB94, CB95, CB96, CB97, CB98, CB99, CB9A, CB9B, CB9C, CB9D, CB9E, CB9F
  922.         dd  CBA0, CBA1, CBA2, CBA3, CBA4, CBA5, CBA6, CBA7, CBA8, CBA9, CBAA, CBAB, CBAC, CBAD, CBAE, CBAF
  923.         dd  CBB0, CBB1, CBB2, CBB3, CBB4, CBB5, CBB6, CBB7, CBB8, CBB9, CBBA, CBBB, CBBC, CBBD, CBBE, CBBF
  924.         dd  CBC0, CBC1, CBC2, CBC3, CBC4, CBC5, CBC6, CBC7, CBC8, CBC9, CBCA, CBCB, CBCC, CBCD, CBCE, CBCF
  925.         dd  CBD0, CBD1, CBD2, CBD3, CBD4, CBD5, CBD6, CBD7, CBD8, CBD9, CBDA, CBDB, CBDC, CBDD, CBDE, CBDF
  926.         dd  CBE0, CBE1, CBE2, CBE3, CBE4, CBE5, CBE6, CBE7, CBE8, CBE9, CBEA, CBEB, CBEC, CBED, CBEE, CBEF
  927.         dd  CBF0, CBF1, CBF2, CBF3, CBF4, CBF5, CBF6, CBF7, CBF8, CBF9, CBFA, CBFB, CBFC, CBFD, CBFE, CBFF
  928.        
  929. LR35902_exec endp
  930.  
  931.   end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement