Subversion Repositories NedoOS

Rev

Rev 1274 | Rev 1305 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1. ;PC=0x4000...
  2. ;SP=0x8000...
  3. ;data=0xC000...
  4.  
  5.      macro DISABLE_IFF0_KEEP_IY ;иначе pop iy запорет iy от обработчика прерывания
  6.         call disable_iff0_keep_iy
  7.      endm
  8.      macro ENABLE_IFF0_REMEMBER_IY ;иначе pop iy запорет iy от обработчика прерывания
  9.         call enable_iff0_remember_iy
  10.      endm
  11.  
  12.  
  13.         MACRO _Loop_
  14.         JP (IY) ;EMULOOP (нужный marg или нужный обработчик b/p)
  15.         ENDM
  16.  
  17. ;если вместо стр.команд включили др.стр.
  18.         MACRO _LoopC
  19.         ;OUTcom
  20.         JP (IY)
  21.         ENDM
  22.  
  23. ;если резко сменился PC (полный DE)
  24.         MACRO _LoopJP
  25.         encodePC;CALCiypgcom
  26.         JP (IY)
  27.         ENDM
  28.  
  29. ;если выключили др.стр. и резко сменился PC (полный DE)
  30.         MACRO _LoopC_JP
  31.         encodePC;CALCiypgcom
  32.         JP (IY)
  33.         ENDM
  34.  
  35. ;если IN/OUT (могла измениться конфигурация памяти)
  36.         MACRO _LoopSWI
  37.         ;CALCpgcom
  38.         JP (IY)
  39.         ENDM
  40.  
  41.         macro decodePC ;de,pc_high -> de
  42.         ld a,(pc_high)
  43.         xor d
  44.         and 0xc0
  45.         xor d
  46.         ld d,a
  47.         endm
  48.  
  49.         macro decodePC_to_ae ;de,pc_high -> ae
  50.         ld a,(pc_high)
  51.         xor d
  52.         and 0xc0
  53.         xor d
  54.         endm
  55.  
  56.         macro encodePC_AisD
  57.        ld (pc_high),a
  58.        and 0xc0
  59.         ld c,a
  60.         ld b,tpgs/256
  61.         res 7,d
  62.         set 6,d
  63.         ld a,(bc)
  64.         SETPG4000
  65.         endm
  66.  
  67.         macro encodePC
  68.        ld a,d
  69.        encodePC_AisD
  70.         endm
  71.  
  72.         macro get
  73.         ld a,(de)
  74.         endm
  75.  
  76.         macro next
  77.         inc e
  78.         call z,recountpc_inc ;keep CY!
  79.         endm
  80.  
  81.         macro getHL
  82.         get
  83.         next
  84.         ld l,a
  85.         get
  86.         next
  87.         ld h,a
  88.         endm
  89.  
  90.         macro getBC
  91.         get
  92.         next
  93.         ld c,a
  94.         get
  95.         next
  96.         ld b,a
  97.         endm
  98.  
  99.        macro putmemspBC
  100.        push bc
  101.         ld hl,(_SP)
  102.         dec hl
  103.         dec hl
  104.         ld (_SP),hl
  105.         ld a,h
  106.         and 0xc0
  107.         ld c,a
  108.         ld b,tpgs/256
  109.         set 7,h
  110.         set 6,h
  111.         ld a,(bc)
  112.         SETPGC000
  113.        pop bc
  114.         ld (hl),c
  115.         inc l
  116.         call z,recountsp_inc
  117.         ld (hl),b
  118.        endm
  119.  
  120.        macro getmemspBC
  121.         call getmemspBCpp
  122.        endm
  123.  
  124. ;c=cmdLSB
  125.        macro GETDEST_cmdc
  126.         ld a,c
  127.         call getdest_aisc
  128.        endm ;bc=dest, a=cmdLSB
  129.  
  130. ;a=cmdLSB
  131.        macro GETDEST_cmda
  132.         ld c,a
  133.         call getdest_aisc
  134.        endm ;bc=dest, a=cmdLSB
  135.  
  136. ;c=cmdLSB
  137.        macro GETDEST_cmdc_autoinc
  138.         ld a,c
  139.         call getdest_aisc_autoinc
  140.        endm ;bc=dest, a=cmdLSB
  141.  
  142. ;a=cmdLSB
  143.        macro GETDEST_cmda_autoinc
  144.         ld c,a
  145.         call getdest_aisc_autoinc
  146.        endm ;bc=dest, a=cmdLSB
  147.  
  148. ;c=cmdLSB
  149.        macro GETDEST8_cmdc
  150.         ld a,c
  151.         call getdest8_aisc
  152.        endm ;c=dest, a=cmdLSB
  153.  
  154. ;a=cmdLSB
  155.        macro GETDEST8_cmda
  156.         ld c,a
  157.         call getdest8_aisc
  158.        endm ;c=dest, a=cmdLSB
  159.  
  160. ;c=cmdLSB
  161.        macro GETDEST8_cmdc_autoinc
  162.         ld a,c
  163.         call getdest8_aisc_autoinc
  164.        endm ;c=dest, a=cmdLSB
  165.  
  166. ;a=cmdLSB
  167.        macro GETDEST8_cmda_autoinc
  168.         ld c,a
  169.         call getdest8_aisc_autoinc
  170.        endm ;c=dest, a=cmdLSB
  171.  
  172. ;bc=data, a=cmdLSB
  173.        macro PUTDEST_Loop
  174.         jp putdest_Loop
  175.        endm
  176.  
  177. ;c=data, a=cmdLSB
  178.        macro PUTDEST8_Loop
  179.         jp putdest8_Loop
  180.        endm
  181.  
  182. ;hl=addr, bc=data
  183.        macro WRMEM_hl_LoopC
  184.        push bc
  185.         ld a,h
  186.         and 0xc0
  187.        jp m,2f ;ROM/ports
  188.         ld c,a
  189.        ld lx,a
  190.         ld b,tpgs/256
  191.         set 7,h
  192.         set 6,h
  193.        cp 0x40
  194.        jr z,1f ;screen
  195.       if DEBUGWR
  196.       ld a,h
  197.       cp 0xc1 ;stack
  198.       jr c,$
  199.       endif
  200.         ld a,(bc)
  201.         SETPGC000
  202.        pop bc
  203.         ld (hl),c
  204.         inc l
  205.         call z,inchnextpg
  206.         ld (hl),b
  207.         _LoopC
  208. 1 ;screen
  209.         ld a,(bc)
  210.         SETPGC000
  211.        pop bc
  212.         ld (hl),c
  213.         call putscreen_c
  214.         inc l
  215.         jr z,3f;screen inchnextpg
  216. 5
  217.         ld (hl),b
  218.         ld c,b
  219.         call putscreen_c
  220.         _LoopC
  221. 3
  222.         inc h
  223.         jr nz,5b
  224. ;screen nextpg = ROM
  225.         ;call hlnextpg
  226. 9
  227.         _LoopC
  228. 2 ;ROM/ports
  229.       if 0
  230.        inc h
  231.        jr nz,9b ;no ports
  232. ;FFB0=177660 регистр состояния клавиатуры (Разряд 6 - маска прерываний от клавиатуры. разряд доступен по записи и чтению. “0” - разрешено прерывание от клавиатуры; “1” - запрещено прерывание от клавиатуры. Разряд 7 - флаг состояния клавиатуры. Устанавливается в единицу при поступлении в регистр данных клавиатуры нового кода. Сбрасывается в “0” при чтении регистра данных клавиатуры.)
  233. ;FFB2=177662 Регистр данных клавиатуры
  234.         ld a,l
  235.         cp 0xb0
  236.         jr z,2f ;kbd state
  237.         cp 0xb2
  238.         jr nz,9b ;no ports
  239. ;kbd data
  240.         _LoopC
  241. 2 ;kbd state
  242.       endif
  243.         _LoopC
  244.        endm
  245.  
  246. ;hl=addr, c=data
  247.        macro WRMEM8_hl_LoopC
  248.        push bc
  249.         ld a,h
  250.         and 0xc0
  251.        jp m,2f ;ROM/ports
  252.         ld c,a
  253.        ld lx,a
  254.         ld b,tpgs/256
  255.         set 7,h
  256.         set 6,h
  257.        cp 0x40
  258.        jr z,1f ;screen
  259.         ld a,(bc)
  260.         SETPGC000
  261.        pop bc
  262.         ld (hl),c
  263.         _LoopC
  264. 1 ;screen
  265.         ld a,(bc)
  266.         SETPGC000
  267.        pop bc
  268.         ld (hl),c
  269.         call putscreen_c
  270.         _LoopC
  271. 2 ;ROM/ports
  272. ;TODO ports
  273.         _LoopC
  274.        endm
  275.  
  276.        macro RDMEM_ac_ret ;bc=result, a=hx
  277.         ld h,a
  278.        cp 0xff
  279.        jp z,rdport_c
  280.      ;ld a,h
  281.      ;cp 0x09
  282.      ;jr z,$
  283.         ld l,c
  284.         and 0xc0
  285.         ld c,a
  286.        ld lx,a ;for nextpg
  287.         ld b,tpgs/256
  288.         set 7,h
  289.         set 6,h
  290.         ld a,(bc)
  291.         SETPGC000
  292.        ld a,hx
  293.         ld c,(hl)
  294.         inc l
  295.         ld b,(hl)
  296.         ret nz
  297.         inc h
  298.         call z,hlnextpg
  299.         ld b,(hl)
  300.         ret
  301.        endm
  302.