?login_element?

Subversion Repositories NedoOS

Rev

Rev 1031 | Blame | Compare with Previous | Last modification | View Log | Download

  1. ;4000 - страница команд (может подменяться при доступе к данным, но потом вызывается OUTcom)
  2. ;8000,c000 - страницы в 8000,c000
  3.  
  4. ;(для extpg5) putmem всегда пишет через регистр C! так можно перехватывать запись в экран
  5.  
  6.         MACRO get
  7.         LD A,(DE)
  8.         ENDM
  9.  
  10.         MACRO getHL
  11.         get
  12.         next
  13.         LD L,A
  14.         get
  15.         next
  16.         LD H,A
  17.         ENDM
  18.  
  19.         MACRO next
  20.         inc e
  21.         call z,next_incd
  22.         ENDM
  23.  
  24.         MACRO OUTcom ;если вместо стр.команд включили др.стр.
  25.         ;LD HL,(curquart)
  26.         ;LD A,(HL)
  27.         ;OUTPGCOM
  28.         call set4000com ;проскакивает, если 4000 не щёлкали
  29.         ENDM
  30.  
  31. ;вариант с call nc после большинства команд, работающих с памятью, в CY сохранился старший бит адреса
  32.         MACRO OUTcomCY15 ;если вместо стр.команд включили др.стр.
  33.         ;LD HL,(curquart)
  34.         ;LD A,(HL)
  35.         ;OUTPGCOM
  36.         call nc,set4000com ;проскакивает, если 4000 не щёлкали
  37.         ENDM
  38.  
  39.         MACRO CALCpgcom ;изменилась конфигурация памяти, надо включить страницу для DE(PC)
  40.         ;LD HL,(curquart)
  41.         ;LD A,(HL)
  42.         ;OUTPGCOM
  43.         call set4000com ;проскакивает, если 4000 не щёлкали
  44.         ENDM
  45.  
  46.      ;перед JR/CALL/RST (на входе - урезанный DE(PC), а надо получить полный)
  47.         MACRO CALCpc
  48.         LD A,(curquart) ;один из 4 адресов подряд, где лежат текущие страницы в окнах ;a=0,1,2,3 for 4000,8000,c000,0000
  49.         RRCA
  50.         RRCA ;a=0x00,0x40,0x80,0xc0 for 4000,8000,c000,0000
  51.         add a,d ;d=0x40+
  52.         LD D,A ;0x40,0x80,0xC0,0x00 for 4000,8000,c000,0000
  53.         ENDM
  54.  
  55.      ;после JR/JP/CALL/RST/RET (на входе - полный DE(PC), а надо получить урезанный)
  56.      ;в случае CALL/RST/RET могла подмениться 4000
  57.         MACRO CALCiypgcom
  58.         ld a,d
  59.         rlca
  60.         rlca
  61.         dec a
  62.         and 3 ;a=0,1,2,3 for 4000,8000,c000,0000
  63.         res 7,d
  64.         set 6,d
  65.         ld (curquart),a
  66.         ld l,a
  67.         ld h,emulcurpg0000/256
  68.         LD A,(HL)
  69.         OUTPGCOM
  70.         ld a,0xc9
  71.         ld (set4000com),a
  72.         ENDM
  73.  
  74. ;портит HL,BC!
  75.         MACRO mem ;page [hl], на выходе CY=A15
  76.         ld a,h
  77.         add a,a
  78.         call nc,setmem00004000
  79.         ENDM
  80.  
  81.         MACRO getmem ;a<=[hl], на выходе CY=A15
  82.         mem
  83.         LD A,(HL)
  84.         ENDM
  85.  
  86. ;портит BC! на выходе CY=A15
  87.         MACRO putmem ;a<=[hl]
  88.         ld c,a
  89.         ld a,h
  90.         add a,a
  91.         call nc,setmem00004000writec
  92.        if extpg5
  93.         call c,setmem8000c000writec
  94.        else
  95.         ld (hl),c
  96.        endif
  97.         ENDM
  98.  
  99. ;портит HL,A! на выходе CY=A15
  100.         MACRO getmemBC
  101.         ld a,h
  102.         add a,a
  103.         call nc,setmem00004000
  104.         LD C,(HL)
  105.         INC L
  106.         JP NZ,1f;q ;внутри mem нет метки 1
  107.         rra
  108.         ld h,a
  109.         INC h
  110.         mem
  111. 1;q
  112.         LD B,(HL)
  113.         ENDM
  114.  
  115. ;портит HL,A! на выходе CY=A15
  116.         MACRO putmemBC
  117.         ld a,h
  118.         add a,a
  119.         call nc,setmem00004000writec
  120.        if extpg5
  121.         call c,setmem8000c000writec
  122.        else
  123.         ld (hl),c
  124.        endif
  125.          ld c,b
  126.        if extpg5
  127.         rra
  128.         ld h,a
  129.         inc hl
  130.        else
  131.         INC L
  132.         JP NZ,1f;q
  133.         rra
  134.         ld h,a
  135.         INC h
  136.        endif
  137.         ld a,h
  138.         add a,a
  139.         call nc,setmem00004000writec
  140.        if extpg5
  141.         call c,setmem8000c000writec
  142.        endif
  143. 1;q
  144.        if !extpg5
  145.         ld (hl),c
  146.        endif
  147.         ENDM
  148.