?login_element?

Subversion Repositories NedoOS

Rev

Rev 1132 | Rev 1202 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. PANIC
  2.         jr $
  3.  
  4. incdec2si_hl
  5. incdec2di_hl
  6.         inc hl
  7. incdecsi_hl
  8. incdecdi_hl
  9.         inc hl
  10.         ret
  11.  
  12. LEAr16rm
  13. ;чруЁєчшЄ№ ¤ЇЇхъЄштэ√щ рфЁхё (эряЁшьхЁ, lea si,shift[bx] - ёыюцшЄ№ bx+shift, яюыюцшЄ№ т si)
  14.         get
  15.         next
  16.         push af
  17.         call ADDRm16_pp
  18. ;hl=addr
  19. ;abc=?s*16 (not used)
  20.        ld b,h
  21.        ld c,l
  22.         ;no ADDRSEGMENT_chl_bHSB
  23.         pop af
  24.         rra
  25.         rra
  26.         and 7*2
  27.         ld l,a ;reg16 addr
  28.         ld h,_AX/256
  29.        _PUTr16LoopC
  30.  
  31. LESr16mem
  32. ;чруЁєчшЄ№ єърчрЄхы№, шёяюы№чє  ES
  33. ;шч ярь Єш ўшЄрхь reg, яюЄюь es
  34.         get
  35.         next
  36.        push af
  37.        ADDRm16_GETm16_keeplx_nokeepaf ;bc=rmmem
  38. ;єцх яЁюўшЄрэю 2 срщЄр bc шч (hl), эю hl эх ёфтшэєЄ
  39.        push bc
  40.         skip2b_GETm16 ;bc=new ES
  41.        ld (_ES),bc ;new ES
  42.        countES
  43.        pop bc
  44.        pop af
  45.         rra
  46.         rra
  47.         and 7*2
  48.         ld l,a ;reg16 addr
  49.         ld h,_AX/256
  50.        _PUTr16LoopC
  51. LDSr16mem
  52. ;чруЁєчшЄ№ єърчрЄхы№, шёяюы№чє  DS
  53. ;lds r16,m16:16
  54. ;шч ярь Єш ўшЄрхь reg, яюЄюь ds
  55.         get
  56.         next
  57.        push af
  58.        ADDRm16_GETm16_keeplx_nokeepaf ;bc=rmmem
  59. ;єцх яЁюўшЄрэю 2 срщЄр bc шч (hl), эю hl эх ёфтшэєЄ
  60.        push bc
  61.         skip2b_GETm16 ;bc=new DS
  62.        ld (_DS),bc ;new DS
  63.        countDS
  64.        pop bc
  65.        pop af
  66.         rra
  67.         rra
  68.         and 7*2
  69.         ld l,a ;reg16 addr
  70.         ld h,_AX/256
  71.        _PUTr16LoopC
  72.  
  73. EXTer
  74. ;0f 31 = rdtsc eax edx
  75. ;0f b6 d0 = movzx dx,al (move with zero-extend)
  76. ;0f b6 c2 = movzx ax,dl (move with zero-extend)
  77. ;0F DA  r P3+     PMINUB mm mm/m64   sse1      Minimum of Packed Unsigned Byte Integers (for pixeltwn)
  78. ;0F 82 (xx xx) JC rel16/32 Jump near if below/not above or equal/carry (CF=1) ;(for pixeltwn)
  79. ;0F 83 (A4 00) JNC rel16/32 Jump near if not below/above or equal/not carry (CF=0) ;(for pixeltwn)
  80. ;0F 85 (6B FF) jnz rel16 (for megapole)
  81. ;0F AF C3 imul ax,bx (for megapole)
  82. ;0F 45 C1 CMOVNZ ax,cx (for megapole) Conditional Move - not zero/not equal (ZF=0)
  83. ;JNAE rel16/32    
  84. ;JC rel16/32
  85.  
  86. ;TODO яЁюўшх рфЁхёрЎшш
  87.         get
  88.         next
  89.        cp 0x31
  90.        jr z,RDTSCer
  91.        cp 0x45
  92.        jr z,CMOVNZer
  93.        cp 0x82
  94.        jp z,JCrel16
  95.        cp 0x83
  96.        jp z,JNCrel16
  97.        cp 0x84
  98.        jp z,JZrel16
  99.        cp 0x85
  100.        jp z,JNZrel16
  101.        cp 0xaf
  102.        jr z,IMULr1r2
  103.        cp 0xda
  104.        jr z,PMINUBer
  105.        cp 0xb6
  106.        jr nz,$
  107.         get
  108.         next
  109.        cp 0xc2
  110.        jr z,MOVZXaxdl
  111.        cp 0xd0
  112.        jr nz,$
  113.         ld hl,(_AL)
  114.         ld h,0
  115.         ld (_DX),hl
  116.        _Loop_
  117.        
  118. CMOVNZer
  119. ;CMOVNZ ax,cx - Conditional Move - not zero/not equal (ZF=0)
  120.         ex af,af' ;'
  121.         jr z,CMOVnzer_no
  122.         ld hl,(_CX)
  123.         ld (_AX),hl
  124. CMOVnzer_no
  125.         ex af,af' ;'
  126.        _Loop_
  127.  
  128. IMULr1r2
  129.         get
  130.         next
  131.        push de
  132.         ld bc,(_BX) ;TODO other regs
  133.         ld de,(_AX);ex de,hl ;de=ax ;TODO other regs
  134.         call IMUL_bc_de_to_hlde
  135.         ;ld (_DX),hl ;HSW
  136.         ld (_AX),de ;LSW
  137.        pop de
  138.        _Loop_
  139.        
  140. MOVZXaxdl
  141.         ld hl,(_DL)
  142.         ld h,0
  143.         ld (_AX),hl
  144.        _Loop_
  145.        
  146. PMINUBer
  147. ;эх єтхЁхэ, ўЄю Єръюх яютхфхэшх - TODO
  148.         ld hl,(_AX)
  149.         ld a,l
  150.         cp h
  151.         jr c,$+3
  152.         ld l,h
  153.         ld h,0
  154.         ld (_AX),hl
  155.        _Loop_
  156.  
  157. RDTSCer
  158. ;ъюёЄ√ы№ фы  para512
  159.         ld a,r
  160.         ld l,a
  161.         ld h,a
  162.         ld (_AX),hl
  163.        _Loop_
  164.  
  165. JCrel16
  166.         ex af,af' ;'
  167.         jr c,JRrel16y
  168.         ex af,af' ;'
  169.         next
  170.         next
  171.        _Loop_
  172. JNCrel16
  173.         ex af,af' ;'
  174.         jr nc,JRrel16y
  175.         ex af,af' ;'
  176.         next
  177.         next
  178.        _Loop_
  179. JZrel16
  180.         ex af,af' ;'
  181.         jr z,JRrel16y
  182.         ex af,af' ;'
  183.         next
  184.         next
  185.        _Loop_
  186. JNZrel16
  187.         ex af,af' ;'
  188.         jr nz,JRrel16y
  189.         ex af,af' ;'
  190.         next
  191.         next
  192.        _Loop_
  193. JRrel16y
  194.         ex af,af' ;'
  195.         get
  196.         next
  197.         ld l,a
  198.         get
  199.         next
  200.         LD H,A
  201.        decodePC ;a=d
  202.         ADD HL,DE
  203.        ;ld a,d
  204.        xor h
  205.        and 0xc0
  206.         ex de,hl ;new PC
  207.        jr z,JRrel16_qslow
  208.        _LoopC_JPoldpg
  209. JRrel16_qslow
  210.        _LoopC_JP
  211.  
  212. ;эр тїюфх т ъюьрэфє:
  213. ;схч ёхуьхэЄэюую яЁхЇшъёр: b=l(рфЁхё юсЁрсюЄўшър)
  214. ;ё ёхуьхэЄэ√ь яЁхЇшъёюь: b=?s_LSW+1(эхў╕Єэ√щ)
  215. ;тёх юсЁрсюЄўшъш rm-ъюьрэф (ш тююс∙х ъюьрэф ё яюфьхэющ ёхуьхэЄр) яю ў╕Єэюьє рфЁхёє
  216. DSer
  217.         ld b,1+(ds_LSW&0xff)
  218.         get
  219.         next
  220.         LD L,A
  221.         ld H,MAINCOMS/256
  222.         LD a,(HL)
  223.         INC H
  224.         LD H,(HL)
  225.         ld L,a
  226.         JP (HL)
  227. CSer
  228.         ld b,1+(cs_LSW&0xff)
  229.         get
  230.         next
  231.         LD L,A
  232.         ld H,MAINCOMS/256
  233.         LD a,(HL)
  234.         INC H
  235.         LD H,(HL)
  236.         ld L,a
  237.         JP (HL)
  238. ESer
  239.         ld b,1+(es_LSW&0xff)
  240.         get
  241.         next
  242.         LD L,A
  243.         ld H,MAINCOMS/256
  244.         LD a,(HL)
  245.         INC H
  246.         LD H,(HL)
  247.         ld L,a
  248.         JP (HL)
  249. SSer
  250.         ld b,1+(ss_LSW&0xff)
  251.         get
  252.         next
  253.         LD L,A
  254.         ld H,MAINCOMS/256
  255.         LD a,(HL)
  256.         INC H
  257.         LD H,(HL)
  258.         ld L,a
  259.         JP (HL)
  260. FSer
  261.         ld b,1+(fs_LSW&0xff)
  262.         get
  263.         next
  264.         LD L,A
  265.         ld H,MAINCOMS/256
  266.         LD a,(HL)
  267.         INC H
  268.         LD H,(HL)
  269.         ld L,a
  270.         JP (HL)
  271. GSer
  272.         ld b,1+(gs_LSW&0xff)
  273.         get
  274.         next
  275.         LD L,A
  276.         ld H,MAINCOMS/256
  277.         LD a,(HL)
  278.         INC H
  279.         LD H,(HL)
  280.         ld L,a
  281.         JP (HL)
  282.  
  283. XLATBer
  284. ;AL = DS:[(E)BX + AL]
  285.         ld a,(_AL)
  286.         ld hl,(_BX)
  287.         add a,l
  288.         ld l,a
  289.         jr nc,$+3
  290.         inc h
  291.         call ADDRGETm16_pp_ds_nodisp ;ьюцхЄ яюфьхэшЄ№ ёхуьхэЄ
  292.         ld a,(hl)
  293.         ld (_AL),a
  294.        _LoopC
  295.  
  296. getflags_bc
  297.         ex af,af' ;'
  298.         push af
  299.         ex af,af' ;'
  300.         pop bc
  301. ;c=%SZ?H???C
  302.          res 5,c
  303.          res 3,c
  304.          res 2,c
  305.          set 1,c ;TODO a
  306.         exx
  307.         ld a,d ;parity data
  308.         exx
  309.         or a
  310.         jp po,$+5
  311.         set 2,c
  312. ;c=%SZ0A0P1C
  313. ;c=%SF:ZF:0:AF:0:PF:1:CF
  314.         ld b,0x30 ;+ 2
  315.         ld a,(iff1)
  316.         or a
  317.         jr z,$+4
  318.         set 1,b ;interrupt enable
  319.         ld a,(_DIRECTION) ;TODO from patch
  320.         rra
  321.         jr nc,$+4
  322.         set 2,b
  323.         exx
  324.         ld a,e ;overflow data
  325.         and 0x40
  326.         rla
  327.         xor e
  328.         exx        
  329.         ret p ;jp p,$+5
  330.         set 3,b
  331.         ret
  332.  
  333. makeflags_frombc
  334. ;c=%SF:ZF:0:AF:0:PF:1:CF
  335.        if 1
  336.         ld a,b
  337.         and 2 ;interrupt enable
  338.         add a,-1
  339.         sbc a,a
  340.         ;ld (iff1),a
  341.         ld a,b
  342.         and 4 ;direction
  343.         add a,-1
  344.         sbc a,a
  345.         ;ld (_DIRECTION),a
  346.         and 8
  347.         or 0x23 ;"inc hl" ;0x2b ;"dec hl"
  348.         ;ld (incdec2si_hl),a
  349.         ;ld (incdecsi_hl),a
  350.         ld a,b
  351.        cpl ;???
  352.         and 8 ;overflow
  353.         rlca
  354.         rlca
  355.         rlca ;a=0x00/0x40
  356.         exx
  357.         ld e,a ;overflow data ;шыш шэтхЁёэю?
  358.         exx
  359.         ld a,c
  360.        cpl ;???
  361.         and 4 ;parity
  362.         exx
  363.         ld d,a ;parity data ;шыш шэтхЁёэю?
  364.         exx
  365.        endif
  366.         push bc
  367.         ex af,af' ;'
  368.         pop af
  369.         ex af,af' ;'
  370.         ret
  371.  
  372. SAHFer
  373.         call getflags_bc
  374. ;store AH into flags
  375.         ld a,(_AH)
  376.         ld c,a
  377.        ;ld bc,(_AX) ;for megapole
  378.         call makeflags_frombc
  379.        _Loop_
  380.  
  381. LAHFer
  382. ;Load Status Flags into AH Register
  383.         call getflags_bc
  384.         ld a,c
  385.         ld (_AH),a
  386.        _Loop_
  387.  
  388. CLIer
  389.         xor a
  390.         ld (iff1),a
  391.        _Loop_
  392.  
  393. STIer
  394.         ld a,-1
  395.         ld (iff1),a
  396.        _Loop_
  397.  
  398. CLDer
  399.         xor a
  400.         ld (_DIRECTION),a
  401.         ld a,0x23 ;"inc hl"
  402.         ld (incdec2si_hl),a
  403.         ld (incdecsi_hl),a
  404. NOPer
  405. HLTer ;TODO
  406.        _Loop_
  407.  
  408. STDer
  409.         ld a,-1
  410.         ld (_DIRECTION),a
  411.         ld a,0x2b ;"dec hl"
  412.         ld (incdec2si_hl),a
  413.         ld (incdecsi_hl),a
  414.        _Loop_
  415.  
  416. STCer
  417.         ex af,af' ;'
  418.         scf
  419.         ex af,af' ;'
  420.        _Loop_
  421.  
  422. CLCer
  423.         ex af,af' ;'
  424.         scf
  425.         ex af,af' ;'
  426. CMCer
  427.         ex af,af' ;'
  428.         ccf
  429.         ex af,af' ;'
  430.        _Loop_
  431.  
  432. PUSHAer
  433. ;╤юїЁрэшЄ№ т ёЄхъх ЁхушёЄЁ√ AX, CX, DX, BX, шёїюфэ√щ (TODO) SP, BP, SI ш DI
  434.         ld hl,_AX
  435.         ld b,8
  436. _PUSHAer0
  437.         push bc
  438.         ld c,(hl)
  439.         inc l
  440.         ld b,(hl)
  441.         inc l
  442.         push hl
  443.         putmemspBC
  444.         pop hl
  445.         pop bc
  446.         djnz _PUSHAer0
  447.        _Loop_
  448.  
  449. PUSHi8
  450.         get
  451.         next
  452.         ld c,a
  453.         rla
  454.         sbc a,a
  455.         ld b,a
  456.        jr _PUSHq
  457. PUSHi16
  458.         getBC
  459.        jr _PUSHq
  460. PUSHFer
  461.        call getflags_bc
  462.        jr _PUSHq
  463. PUSHax
  464.        ld bc,(_AX)
  465.        jr _PUSHq
  466. PUSHcx
  467.        ld bc,(_CX)
  468.        jr _PUSHq
  469. PUSHdx
  470.        ld bc,(_DX)
  471.        jr _PUSHq
  472. PUSHbx
  473.        ld bc,(_BX)
  474.        jr _PUSHq
  475. PUSHsp
  476.        ld bc,(_SP)
  477.        jr _PUSHq
  478. PUSHbp
  479.        ld bc,(_BP)
  480.        jr _PUSHq
  481. PUSHsi
  482.        ld bc,(_SI)
  483.        jr _PUSHq
  484. PUSHdi
  485.        ld bc,(_DI)
  486.        jr _PUSHq
  487. PUSHes
  488.        ld bc,(_ES)
  489.        jr _PUSHq
  490. PUSHcs
  491.        ld bc,(_CS)
  492.        jr _PUSHq
  493. PUSHss
  494.        ld bc,(_SS)
  495.        jr _PUSHq
  496. PUSHds
  497.        ld bc,(_DS)
  498. _PUSHq
  499.         putmemspBC
  500.        _LoopC
  501.  
  502. POPAer
  503. ;╟руЁєчшЄ№ шч ёЄхър ЁхушёЄЁ√ DI, SI, BP, BX, DX, CX ш AX
  504. ;╩юьрэфр POPA яЁюфхы√трхЄ фхщёЄтш  юсЁрЄэ√х ъюьрэфх PUSHA, тюёёЄрэртыштр  ЁхушёЄЁ√ юс∙хую эрчэрўхэш  ъ чэрўхэш ь, с√т°шь т эшї фю т√яюыэхэш  ъюьрэф√ PUSHA, ъЁюьх ЁхушёЄЁр SP, ъюЄюЁ√щ яЁюяєёърхЄё  (TODO)
  505.         ld hl,_AX+(8*2)
  506.         ld b,8
  507. _POPAer0
  508.         push bc
  509.         push hl
  510.         getmemspBC
  511.         pop hl
  512.         dec l
  513.         ld (hl),b
  514.         dec l
  515.         ld (hl),c
  516.         pop bc
  517.         djnz _POPAer0
  518.        _Loop_
  519.  
  520. POPFer
  521.         getmemspBC
  522.         call makeflags_frombc
  523.        _LoopC
  524. POPax
  525.         getmemspBC
  526.         ld (_AX),bc
  527.        _LoopC
  528. POPcx
  529.         getmemspBC
  530.         ld (_CX),bc
  531.        _LoopC
  532. POPdx
  533.         getmemspBC
  534.         ld (_DX),bc
  535.        _LoopC
  536. POPbx
  537.         getmemspBC
  538.         ld (_BX),bc
  539.        _LoopC
  540. POPsp
  541.         getmemspBC
  542.         ld h,b
  543.         ld l,c
  544.         ld (_SP),hl
  545.         encodeSP
  546.        _LoopC
  547. POPbp
  548.         getmemspBC
  549.         ld (_BP),bc
  550.        _LoopC
  551. POPsi
  552.         getmemspBC
  553.         ld (_SI),bc
  554.        _LoopC
  555. POPdi
  556.         getmemspBC
  557.         ld (_DI),bc
  558.        _LoopC
  559. POPes
  560.         getmemspBC
  561.         ld (_ES),bc
  562.         countES
  563.        _LoopC
  564. POPcs
  565.         getmemspBC
  566.         ld (_CS),bc
  567.         countCS
  568.        _LoopC
  569. POPss
  570.         getmemspBC
  571.         ld (_SS),bc
  572.         countSS
  573.        _LoopC
  574. POPds
  575.         getmemspBC
  576.         ld (_DS),bc
  577.         countDS
  578.        _LoopC
  579.  
  580. MOVaxi16
  581.         getHL
  582.         ld (_AX),hl
  583.        _Loop_
  584. MOVcxi16
  585.         getHL
  586.         ld (_CX),hl
  587.        _Loop_
  588. MOVdxi16
  589.         getHL
  590.         ld (_DX),hl
  591.        _Loop_
  592. MOVbxi16
  593.         getHL
  594.         ld (_BX),hl
  595.        _Loop_
  596. MOVspi16
  597.         getHL
  598.         ld (_SP),hl
  599.         encodeSP
  600.        _LoopC
  601. MOVbpi16
  602.         getHL
  603.         ld (_BP),hl
  604.        _Loop_
  605. MOVsii16
  606.         getHL
  607.         ld (_SI),hl
  608.        _Loop_
  609. MOVdii16
  610.         getHL
  611.         ld (_DI),hl
  612.        _Loop_
  613.  
  614. MOVali8
  615.         get
  616.         next
  617.         ld (_AL),a
  618.        _Loop_
  619. MOVcli8
  620.         get
  621.         next
  622.         ld (_CL),a
  623.        _Loop_
  624. MOVdli8
  625.         get
  626.         next
  627.         ld (_DL),a
  628.        _Loop_
  629. MOVbli8
  630.         get
  631.         next
  632.         ld (_BL),a
  633.        _Loop_
  634. MOVahi8
  635.         get
  636.         next
  637.         ld (_AH),a
  638.        _Loop_
  639. MOVchi8
  640.         get
  641.         next
  642.         ld (_CH),a
  643.        _Loop_
  644. MOVdhi8
  645.         get
  646.         next
  647.         ld (_DH),a
  648.        _Loop_
  649. MOVbhi8
  650.         get
  651.         next
  652.         ld (_BH),a
  653.        _Loop_
  654.  
  655. ;mov [addr],al
  656.         ALIGNrm
  657. MOVmemal
  658.         getHL
  659.         call ADDRGETm16_pp_ds_nodisp
  660.        ; ADDRSEGMENT_chl_bHSB ;out: hl=zxaddr, c=page (%01..5432), b=?s_HSB
  661.        ;ld lx,c;push bc
  662.         ;ld b,tpgs/256
  663.         ;ld a,(bc)
  664.         ;SETPGC000
  665.         ld a,(_AL)
  666.         ld (hl),a
  667.        ld c,lx;pop bc
  668.        _PUTscreen_logpgc_zxaddrhl_datamhl
  669.        _LoopC
  670.  
  671. ;mov [addr],ax
  672.         ALIGNrm
  673. MOVmemax
  674.         getHL
  675.         call ADDRGETm16_pp_ds_nodisp
  676.        ; ADDRSEGMENT_chl_bHSB ;out: hl=zxaddr, c=page (%01..5432), b=?s_HSB
  677.        ;ld lx,c;push bc
  678.        ;  ld b,tpgs/256
  679.        ;  ld a,(bc)
  680.         ;SETPGC000
  681.         ld bc,(_AX)
  682.        _PUTm16_oldpglx
  683.        _LoopC
  684.  
  685. ;mov al,[addr]
  686.         ALIGNrm
  687. MOValmem
  688.         getHL
  689.         call ADDRGETm16_pp_ds_nodisp
  690.         ;ADDRSEGMENT_chl_bHSB ;out: hl=zxaddr, c=page (%01..5432), b=?s_HSB
  691.         ;ld b,tpgs/256
  692.         ;ld a,(bc)
  693.         ;SETPGC000
  694.         ld a,(hl)
  695.         ld (_AL),a
  696.        _LoopC
  697.  
  698. ;mov ax,[addr]
  699.         ALIGNrm
  700. MOVaxmem
  701.         getHL
  702.         call ADDRGETm16_pp_ds_nodisp
  703.         ;ADDRSEGMENT_chl_bHSB ;out: hl=zxaddr, c=page (%01..5432), b=?s_HSB
  704.        ;ld lx,c
  705.         ;ld b,tpgs/256
  706.         ;ld a,(bc)
  707.         ;SETPGC000
  708.         ld a,(hl)
  709.         inc l
  710.         call z,inch_nextsubsegment_pglx
  711.         ld b,(hl)
  712.         ld c,a
  713.         ld (_AX),bc
  714.        _LoopC
  715.  
  716. INCax
  717.         ld hl,(_AX)
  718.         inchlwithflags
  719.         ld (_AX),hl
  720.        _Loop_
  721. INCcx
  722.         ld hl,(_CX)
  723.         inchlwithflags
  724.         ld (_CX),hl
  725.        _Loop_
  726. INCdx
  727.         ld hl,(_DX)
  728.         inchlwithflags
  729.         ld (_DX),hl
  730.        _Loop_
  731. INCbx
  732.         ld hl,(_BX)
  733.         inchlwithflags
  734.         ld (_BX),hl
  735.        _Loop_
  736. INCsp
  737.         ld hl,(_SP)
  738.         inchlwithflags
  739.         ld (_SP),hl
  740.        encodeSP
  741.        _LoopC
  742. INCbp
  743.         ld hl,(_BP)
  744.         inchlwithflags
  745.         ld (_BP),hl
  746.        _Loop_
  747. INCsi
  748.         ld hl,(_SI)
  749.         inchlwithflags
  750.         ld (_SI),hl
  751.        _Loop_
  752. INCdi
  753.         ld hl,(_DI)
  754.         inchlwithflags
  755.         ld (_DI),hl
  756.        _Loop_
  757.  
  758. DECax
  759.         ld hl,(_AX)
  760.         dechlwithflags
  761.         ld (_AX),hl
  762.        _Loop_
  763. DECcx
  764.         ld hl,(_CX)
  765.         dechlwithflags
  766.         ld (_CX),hl
  767.        _Loop_
  768. DECdx
  769.         ld hl,(_DX)
  770.         dechlwithflags
  771.         ld (_DX),hl
  772.        _Loop_
  773. DECbx
  774.         ld hl,(_BX)
  775.         dechlwithflags
  776.         ld (_BX),hl
  777.        _Loop_
  778. DECsp
  779.         ld hl,(_SP)
  780.         dechlwithflags
  781.         ld (_SP),hl
  782.        encodeSP
  783.        _LoopC
  784. DECbp
  785.         ld hl,(_BP)
  786.         dechlwithflags
  787.         ld (_BP),hl
  788.        _Loop_
  789. DECsi
  790.         ld hl,(_SI)
  791.         dechlwithflags
  792.         ld (_SI),hl
  793.        _Loop_
  794. DECdi
  795.         ld hl,(_DI)
  796.         dechlwithflags
  797.         ld (_DI),hl
  798.        _Loop_
  799.  
  800. CALLer
  801.         getHL
  802.        decodePC
  803.         add hl,de
  804.         ex de,hl ;new IP(PC)
  805.         ld b,h
  806.         ld c,l ;=old IP(PC)
  807.         putmemspBC
  808.        _LoopJP
  809.  
  810. CALLptr1616
  811. ;push cs; push ip (рфЁхё яюёых ъюьрэф√)
  812.        ld bc,(_CS)
  813.         putmemspBC ;old CS
  814. ;рсёюы■Єэ√щ рфЁхё ip, cs
  815.         getBC ;ip
  816.        push bc
  817.         getBC ;cs
  818.         ld (_CS),bc ;new CS
  819.         countCS
  820.        decodePC
  821.         LD b,d
  822.         ld c,e ;=old PC
  823.        pop de ;new PC
  824.         putmemspBC
  825.        _LoopJP
  826.  
  827. JMPptr1616
  828. ;рсёюы■Єэ√щ рфЁхё ip, cs
  829.         getBC ;ip
  830.         push bc
  831.         getBC ;cs
  832.         pop de
  833. RETFq
  834.         ld (_CS),bc
  835.         countCS
  836.        _LoopJP
  837.  
  838. RETer
  839.         getmemspBC
  840.         LD D,B
  841.         ld E,C ;new PC
  842.        _LoopC_JP
  843.  
  844. RETFer
  845.         getmemspBC
  846.        push bc
  847.         getmemspBC
  848.         LD D,B
  849.         ld E,C ;new PC
  850.        pop bc
  851.         jp RETFq
  852.  
  853. RETi16 ;RET ш яюЄюь SP += i16
  854.         getmemspBC
  855.        push bc
  856.         getBC
  857.         ld hl,(_SP)
  858.         add hl,bc
  859.         ld (_SP),hl
  860.         encodeSP
  861.        pop de ;new PC
  862.        _LoopC_JP
  863.  
  864. JLEer ;jump if not greater (zero or less)
  865.         ex af,af' ;'
  866.         jp z,JRYer
  867.         ex af,af' ;'
  868. JLer ;jump if less (SF xor OF = 1)
  869.         ex af,af' ;'
  870.         jp m,exaJNOer
  871. exaJOer
  872.         ex af,af' ;'
  873. JOer ;jump if overflow
  874.         exx
  875.         ld a,e ;overflow data
  876.         and 0x40
  877.         rla
  878.         xor e
  879.         exx
  880.         JP M,JRer
  881.         next
  882.        _Loop_
  883. JGer ;jump if greater (not zero and not less)
  884.         ex af,af' ;'
  885.         jp z,exaNOJP
  886.         ex af,af' ;'
  887. JNLer ;jump if not less (SF xor OF = 0)
  888.         ex af,af' ;'
  889.         jp m,exaJOer
  890. exaJNOer
  891.         ex af,af' ;'
  892. JNOer ;jump if no overflow
  893.         exx
  894.         ld a,e ;overflow data
  895.         and 0x40
  896.         rla
  897.         xor e
  898.         exx
  899.         JP P,JRer
  900.         next
  901.        _Loop_
  902. JPer ;jump if parity even
  903.         exx
  904.         ld a,d ;parity data
  905.         exx
  906.         or a
  907.         JP PE,JRer
  908.         next
  909.        _Loop_
  910. JNPer ;jump if parity odd
  911.         exx
  912.         ld a,d ;parity data
  913.         exx
  914.         or a
  915.         JP PO,JRer
  916.         next
  917.        _Loop_
  918. JNEer
  919.         ex af,af' ;'
  920.         JR NZ,JRYer
  921.         ex af,af' ;'
  922.         next
  923.        _Loop_
  924. JEer
  925.         ex af,af' ;'
  926.         JR Z,JRYer
  927.         ex af,af' ;'
  928.         next
  929.        _Loop_
  930. JNCer
  931.         ex af,af' ;'
  932.         JR NC,JRYer
  933.         ex af,af' ;'
  934.         next
  935.        _Loop_
  936. JCer
  937.         ex af,af' ;'
  938.         JR C,JRYer
  939.         ex af,af' ;'
  940.         next
  941.        _Loop_
  942. JBEer ;jump if CF or ZF = 1
  943.         ex af,af' ;'
  944.         JR C,JRYer
  945.         JR Z,JRYer
  946.         ex af,af' ;'
  947.         next
  948.        _Loop_
  949. JAer ;jump if (CF or ZF) = 0, i.e. CF=ZF=0
  950.         ex af,af' ;'
  951.         JR C,$+4
  952.         JR nz,JRYer
  953.         ex af,af' ;'
  954.         next
  955.        _Loop_
  956. JRYer
  957.         ex af,af' ;'
  958. JRer
  959.         get
  960.         next
  961.         ld l,a
  962.         RLA
  963.         SBC A,A
  964.         LD H,A
  965.        decodePC ;a=d
  966.         ADD HL,DE
  967.        ;ld a,d
  968.        xor h
  969.        and 0xc0
  970.         ex de,hl ;new PC
  971.        jr z,JRer_qslow
  972.        _LoopC_JPoldpg
  973. JRer_qslow
  974.        _LoopC_JP
  975.  
  976. JSer ;jump if sign
  977.         ex af,af' ;'
  978.         jp m,JRYer
  979.         ex af,af' ;'
  980.         next
  981.        _Loop_
  982. JNSer ;jump if no sign
  983.         ex af,af' ;'
  984.         jp p,JRYer
  985. exaNOJP
  986.         ex af,af' ;'
  987.         next
  988.        _Loop_
  989. LOOPNZer
  990.         ex af,af' ;'
  991.         jr z,exaNOJP
  992.         jr exaLOOPer
  993. LOOPZer
  994.         ex af,af' ;'
  995.         jr nz,exaNOJP
  996. exaLOOPer
  997.         ex af,af' ;'
  998. LOOPer
  999.         ld hl,(_CX)
  1000.         dec hl
  1001.         ld (_CX),hl
  1002. JCXZer ;jump if CX != 0
  1003.         ld hl,(_CX)
  1004.         ld a,h
  1005.         or l
  1006.         JR nz,JRer
  1007.         next
  1008.        _Loop_
  1009.  
  1010. JMPer
  1011.         getHL
  1012.        decodePC
  1013.         ADD HL,DE
  1014.         ex de,hl ;new PC
  1015.        _LoopC_JP
  1016.  
  1017.         macro XCHGAXRP rp
  1018.         ld bc,(rp)
  1019.         ld hl,(_AX)
  1020.         ld (rp),hl
  1021.         ld (_AX),bc
  1022.        _Loop_
  1023.         endm
  1024. XCHGaxcx
  1025.         XCHGAXRP _CX
  1026. XCHGaxdx
  1027.         XCHGAXRP _DX
  1028. XCHGaxbx
  1029.         XCHGAXRP _BX
  1030. XCHGaxsp
  1031.         ld bc,(_SP)
  1032.         ld hl,(_AX)
  1033.         ld (_AX),bc
  1034.         ld (_SP),hl
  1035.        encodeSP
  1036.        _Loop_
  1037. XCHGaxbp
  1038.         XCHGAXRP _BP
  1039. XCHGaxsi
  1040.         XCHGAXRP _SI
  1041. XCHGaxdi
  1042.         XCHGAXRP _DI
  1043.  
  1044.        macro INCDEC2HLbyDIRECTION
  1045.         call incdec2si_hl
  1046.        endm
  1047.        macro INCDECSIbyDIRECTION
  1048.         ld hl,(_SI)
  1049.         call incdecsi_hl
  1050.         ld (_SI),hl
  1051.        endm
  1052.        macro INCDECDIbyDIRECTION
  1053.         ld hl,(_DI)
  1054.         call incdecdi_hl
  1055.         ld (_DI),hl
  1056.        endm
  1057.        macro INCDECSI_DIbyDIRECTION
  1058.         ld hl,(_SI)
  1059.         call incdecsi_hl
  1060.         ld (_SI),hl
  1061.         ld hl,(_DI)
  1062.         call incdecdi_hl
  1063.         ld (_DI),hl
  1064.        endm
  1065.        macro INCDEC2SI_DIbyDIRECTION
  1066.         ld hl,(_SI)
  1067.         call incdec2si_hl
  1068.         ld (_SI),hl
  1069.         ld hl,(_DI)
  1070.         call incdec2di_hl
  1071.         ld (_DI),hl
  1072.        endm
  1073.        macro INCDEC2SIbyDIRECTION
  1074.         ld hl,(_SI)
  1075.         call incdec2si_hl
  1076.         ld (_SI),hl
  1077.        endm
  1078.        macro INCDEC2DIbyDIRECTION
  1079.         ld hl,(_DI)
  1080.         call incdec2di_hl
  1081.         ld (_DI),hl
  1082.        endm
  1083.         ALIGNrm
  1084. REPZer
  1085. REPNZer
  1086. ;ъюёЄ√ы№! FIXME
  1087.         get
  1088.         next
  1089.         cp 0xa4
  1090.         jp z,REPMOVSBer
  1091.         cp 0xa6
  1092.         jp z,REPCMPSBer
  1093.         cp 0xa5
  1094.         jp z,REPMOVSWer
  1095.         cp 0xaa
  1096.         jp z,REPSTOSBer
  1097.         cp 0xab
  1098.         jp z,REPSTOSWer
  1099.         cp 0xae
  1100.         jp z,REPSCASBer
  1101.         ;cp 0xaf
  1102.         ;jp z,REPSCASWer
  1103.         jr $;jp PANIC
  1104.  
  1105. REPMOVSWer_scr
  1106.         ld hl,(_DI)
  1107.        push hl
  1108.         ld bc,(_CX)
  1109.         ld hl,(_SI)
  1110. REPMOVSWer_scr0
  1111.         push bc
  1112.         push hl
  1113.         ld bc,(ds_LSW)
  1114.         ld a,(ds_HSB)
  1115.         ADDRSEGMENT_chl_bHSB
  1116.         ld b,tpgs/256
  1117.         ld a,(bc)
  1118.         SETPGC000
  1119.          GETm16
  1120.        push bc
  1121.          ld a,c
  1122.         ld hl,(_DI)
  1123.         ld bc,(es_LSW)
  1124.         ld a,(es_HSB)
  1125.         ADDRSEGMENT_chl_bHSB
  1126.          ld lx,c
  1127.         ld b,tpgs/256
  1128.         ld a,(bc)
  1129.         SETPGC000
  1130.        pop bc
  1131.         _PUTm16_oldpglx
  1132.         INCDEC2DIbyDIRECTION
  1133.         pop hl
  1134.         INCDEC2HLbyDIRECTION
  1135.         pop bc
  1136.         dec bc
  1137.         ld a,b
  1138.         or c
  1139.         jp nz,REPMOVSWer_scr0
  1140.         ;ld hl,0
  1141.         ld (_CX),bc
  1142.        ld hl,(_DI)
  1143.        pop bc ;DI old
  1144.        sbc hl,bc ;was NC
  1145.        ld bc,(_SI)
  1146.        add hl,bc
  1147.        ld (_SI),hl
  1148.        _LoopC
  1149.  
  1150.         ALIGNrm
  1151. MOVSWer
  1152.         ld hl,(_SI)
  1153.         call ADDRGETm16_pp_ds_nodisp
  1154.          GETm16
  1155.        push bc
  1156.        ld a,c
  1157.         ld hl,(_DI)
  1158.         putmemES
  1159.         ld hl,(_DI)
  1160.         inc hl
  1161.        pop af
  1162.         putmemES
  1163.         INCDEC2SI_DIbyDIRECTION
  1164.        _LoopC
  1165.  
  1166.         ALIGNrm
  1167. MOVSBer
  1168.         ld hl,(_SI)
  1169.         call ADDRGETm16_pp_ds_nodisp
  1170.         ld a,(hl)
  1171.         ld hl,(_DI)
  1172.         putmemES
  1173.         INCDECSI_DIbyDIRECTION
  1174.        _LoopC
  1175.  
  1176. ;rep movsw
  1177. REPMOVSWer
  1178. ;TODO Ёрчфхы№эю юяЄшьшчшЁютрЄ№ ъюяшЁютрэшх эр ¤ъЁрэ ш эх эр ¤ъЁрэ
  1179. ;ъюёЄ√ы№: хёыш cx=0, Єю ёЁрчє т√їюфшь (р эх 65536 яютЄюЁют)
  1180.        ld a,(_ES+1)
  1181.        cp 0xa0
  1182.        jp nc,REPMOVSWer_scr
  1183.        ;ld hl,(_CX)
  1184.        ;ld a,h
  1185.        ;or l
  1186.        ;jr z,REPMOVSWerq
  1187.         ld hl,(_SI)
  1188.         getmemDS ;TODO яюфьхэр ёхуьхэЄр
  1189.         ld hl,(_DI)
  1190.         putmemES
  1191.         ld hl,(_SI)
  1192.         inc hl
  1193.         getmemDS ;TODO яюфьхэр ёхуьхэЄр
  1194.         ld hl,(_DI)
  1195.         inc hl
  1196.         putmemES
  1197.         INCDEC2SI_DIbyDIRECTION
  1198.         ld hl,(_CX)
  1199.         dec hl
  1200.         ld (_CX),hl
  1201.         ld a,h
  1202.         or l
  1203.         jp nz,REP_repeat ;TODO keep old b
  1204. REPMOVSWerq
  1205.        _LoopC
  1206.  
  1207. ;rep movsb
  1208. REPMOVSBer
  1209. ;TODO Ёрчфхы№эю юяЄшьшчшЁютрЄ№ ъюяшЁютрэшх эр ¤ъЁрэ ш эх эр ¤ъЁрэ
  1210. ;ъюёЄ√ы№: хёыш cx=0, Єю ёЁрчє т√їюфшь (р эх 65536 яютЄюЁют)
  1211.        ;ld hl,(_CX)
  1212.        ;ld a,h
  1213.        ;or l
  1214.        ;jr z,REPMOVSBerq
  1215.         ld hl,(_SI)
  1216.         getmemDS ;TODO яюфьхэр ёхуьхэЄр
  1217.         ld hl,(_DI)
  1218.         putmemES
  1219.         INCDECSI_DIbyDIRECTION
  1220.         ld hl,(_CX)
  1221.         dec hl
  1222.         ld (_CX),hl
  1223.         ld a,h
  1224.         or l
  1225.         jp nz,REP_repeat ;TODO keep old b
  1226. REPMOVSBerq
  1227.        _LoopC
  1228.  
  1229. REPSTOSBer
  1230. ;TODO Ёрчфхы№эю юяЄшьшчшЁютрЄ№ ъюяшЁютрэшх эр ¤ъЁрэ ш эх эр ¤ъЁрэ
  1231. ;ъюёЄ√ы№: хёыш cx=0, Єю ёЁрчє т√їюфшь (р эх 65536 яютЄюЁют)
  1232.        ld hl,(_CX)
  1233.        ld a,h
  1234.        or l
  1235.        jr z,REPSTOSBerq
  1236.         ld a,(_AL) ;al
  1237.         ld hl,(_DI)
  1238.         putmemES
  1239.         INCDECDIbyDIRECTION
  1240. ;flags not affected
  1241.         ld hl,(_CX)
  1242.         dec hl
  1243.         ld (_CX),hl
  1244.         ld a,h
  1245.         or l
  1246.         jr nz,REP_repeat
  1247. REPSTOSBerq
  1248.        _LoopC
  1249.  
  1250. REPSTOSWer
  1251. ;TODO Ёрчфхы№эю юяЄшьшчшЁютрЄ№ ъюяшЁютрэшх эр ¤ъЁрэ ш эх эр ¤ъЁрэ
  1252. ;ъюёЄ√ы№: хёыш cx=0, Єю ёЁрчє т√їюфшь (р эх 65536 яютЄюЁют)
  1253.        ld hl,(_CX)
  1254.        ld a,h
  1255.        or l
  1256.        jr z,REPSTOSWerq
  1257.         ld a,(_AL) ;al
  1258.         ld hl,(_DI)
  1259.         putmemES
  1260.         ld a,(_AH) ;ah
  1261.         ld hl,(_DI)
  1262.         inc hl
  1263.         putmemES ;TODO speedup
  1264.         INCDEC2DIbyDIRECTION
  1265. ;flags not affected
  1266.         ld hl,(_CX)
  1267.         dec hl
  1268.         ld (_CX),hl
  1269.         ld a,h
  1270.         or l
  1271.         jr nz,REP_repeat
  1272. REPSTOSWerq
  1273.        _LoopC
  1274.  
  1275. REP_repeat ;TODO speedup!!!
  1276.        decodePC
  1277.         dec de
  1278.         dec de ;new PC
  1279.        _LoopC_JP
  1280. ;repz cmpsb
  1281. REPCMPSBer
  1282.         ld hl,(_SI)
  1283.         getmemDS ;TODO яюфьхэр ёхуьхэЄр
  1284.         ex af,af' ;'
  1285.         ld hl,(_DI)
  1286.         getmemES
  1287.         ex af,af' ;'
  1288.         sub (hl)
  1289.         KEEPCFPARITYOVERFLOW_FROMA
  1290.         INCDECSI_DIbyDIRECTION
  1291.         ld hl,(_CX)
  1292.         dec hl
  1293.         ld (_CX),hl
  1294.         ex af,af' ;'
  1295.         jr nz,exaLoopC
  1296.         ex af,af' ;'
  1297.         ld a,h
  1298.         or l
  1299.         jp nz,REP_repeat ;TODO keep old b
  1300.        _LoopC
  1301. ;repnz scasb
  1302. REPSCASBer
  1303.         ld hl,(_SI)
  1304.         getmemDS ;TODO яюфьхэр ёхуьхэЄр
  1305.         ld a,(_AL) ;al
  1306.         sub (hl)
  1307.         KEEPCFPARITYOVERFLOW_FROMA
  1308.         INCDECSIbyDIRECTION
  1309.         ld hl,(_CX)
  1310.         dec hl
  1311.         ld (_CX),hl
  1312.         ex af,af' ;'
  1313.         jr z,exaLoopC
  1314.         ex af,af' ;'
  1315.         ld a,h
  1316.         or l
  1317.         jp nz,REP_repeat ;TODO keep old b
  1318.        _LoopC
  1319. exaLoopC
  1320.         ex af,af' ;'
  1321.        _LoopC
  1322.  
  1323.         ALIGNrm
  1324. SCASBer
  1325.         ld hl,(_SI)
  1326.         call ADDRGETm16_pp_ds_nodisp
  1327.         ld a,(_AL)
  1328.         sub (hl)
  1329.         KEEPCFPARITYOVERFLOW_FROMA
  1330.         INCDECSIbyDIRECTION
  1331.        _LoopC
  1332.  
  1333.         ALIGNrm
  1334. SCASWer
  1335.         ld hl,(_SI)
  1336.         call ADDRGETm16_pp_ds_nodisp
  1337.          GETm16
  1338.         ld hl,(_AX)
  1339.         SBCHLBC_KEEPCFPARITYOVERFLOW_FROMHL
  1340.         INCDEC2DIbyDIRECTION
  1341.        _LoopC
  1342.  
  1343.         ALIGNrm
  1344. CMPSBer
  1345.         ld hl,(_SI)
  1346.         call ADDRGETm16_pp_ds_nodisp
  1347.         ld a,(hl)
  1348.         ex af,af' ;'
  1349.         ld hl,(_DI)
  1350.         getmemES
  1351.         ex af,af' ;'
  1352.         sub (hl)
  1353.         KEEPCFPARITYOVERFLOW_FROMA
  1354.         INCDECSI_DIbyDIRECTION
  1355.        _LoopC
  1356.  
  1357.         ALIGNrm
  1358. LODSBer
  1359.         ld hl,(_SI)
  1360.         call ADDRGETm16_pp_ds_nodisp
  1361.         ld a,(hl)
  1362.         ld (_AL),a
  1363.         INCDECSIbyDIRECTION
  1364. ;flags not affected
  1365. ;dec cx эх эрфю!
  1366.        _LoopC
  1367.  
  1368.         ALIGNrm
  1369. LODSWer
  1370.         ld hl,(_SI)
  1371.         call ADDRGETm16_pp_ds_nodisp
  1372.          GETm16
  1373.         ld (_AX),bc
  1374.         ;ld hl,(_SI)
  1375.         ;getmemDS ;TODO яюфьхэр ёхуьхэЄр
  1376.         ;ld (_AL),a ;al
  1377.         ;ld hl,(_SI)
  1378.         ;inc hl
  1379.         ;getmemDS ;TODO яюфьхэр ёхуьхэЄр
  1380.         ;ld (_AH),a ;ah
  1381. LODSWerincq
  1382.         INCDEC2SIbyDIRECTION
  1383. ;flags not affected
  1384. ;dec cx эх эрфю!
  1385.        _LoopC
  1386.  
  1387.         ALIGNrm
  1388. OPSIZEr
  1389. ;ъюёЄ√ы№ фы  para512
  1390.         get
  1391.         next
  1392. ;TODO check
  1393. ;for lodsd
  1394.         ld hl,(_SI)
  1395.         call ADDRGETm16_pp_ds_nodisp
  1396.          GETm16
  1397.         ld (_AX),bc
  1398.         INCDEC2SIbyDIRECTION
  1399.        jr LODSWerincq
  1400.  
  1401. STOSBer
  1402.         ld a,(_AL) ;al
  1403.         ld hl,(_DI)
  1404.         putmemES
  1405.         INCDECDIbyDIRECTION
  1406. ;flags not affected
  1407. ;dec cx эх эрфю!
  1408.        _LoopC
  1409.  
  1410. STOSWer
  1411.         ld a,(_AL) ;al
  1412.         ld hl,(_DI)
  1413.         putmemES
  1414.         ld a,(_AH) ;ah
  1415.         ld hl,(_DI)
  1416.         inc hl
  1417.         putmemES ;TODO speedup
  1418.         INCDEC2DIbyDIRECTION
  1419. ;flags not affected
  1420. ;dec cx эх эрфю!
  1421.        _LoopC
  1422.  
  1423. ;int 0x20 ;system
  1424. ;int 0x16 ;ah=0: input key -> al
  1425. ;int 0x10 ;ah=0x0e: print al (чрўхь bx=7?)
  1426. ;int 0x10 ;ah=0x00: set gfx mode = al (0x13)
  1427. INTi8
  1428.         get
  1429.         next
  1430.         cp 0x10
  1431.         jr z,INT10
  1432.         cp 0x16
  1433.         jr z,INT16
  1434.         cp 0x1a
  1435.         jr z,INT_gettimer
  1436.         cp 0x21
  1437.         jr z,INT21
  1438.         cp 0x80
  1439.         jr nc,intlooper ;ъюёЄ√ы№ фы  megapole
  1440.         cp 0x20
  1441.         jp z,quiter
  1442.        jr $
  1443. intlooper
  1444.        _Loop_
  1445.  
  1446. INT_gettimer
  1447. ;int 1Ah ;AL= 24 hours overflow flag, CX:DX = 32bit timer
  1448. ;_microtimer=$+1
  1449. ;        ld hl,0
  1450. ;        inc hl
  1451. ;        ld (_microtimer),hl
  1452.        ld hl,(timer)
  1453.        srl h
  1454.        rr l
  1455.        srl h
  1456.        rr l
  1457.        ;srl h
  1458.        ;rr l
  1459.         ld (_DX),hl
  1460.        _Loop_
  1461.  
  1462. INT10
  1463.         ld a,(_AH)
  1464.         or a
  1465.         jr z,INT_setgfx
  1466.         cp 0x0e
  1467.         jr z,INT_printal
  1468.        jr $
  1469.  
  1470. INT21
  1471.         ld a,(_AH)
  1472.         cp 0x09
  1473.         jr z,INT_printstringdx
  1474.  
  1475. ;        mov     ax,ds                   ;deallocate all but 128k mem
  1476. ;        mov     es,ax
  1477. ;        mov     ah,4Ah
  1478. ;        mov     bx,2000h ;size 128k
  1479. ;        int     21h
  1480.  
  1481. ;        mov     ah,35h                  ;get and save old int 09h vector
  1482. ;        mov     al,09h
  1483. ;        int     21h
  1484. ;        mov     word ptr old_int9[0],bx
  1485. ;        mov     word ptr old_int9[2],es
  1486.  
  1487. ;set new int 09h vector
  1488. ;        push    cs
  1489. ;        pop     ds
  1490. ;        mov     dx,offset key_int
  1491. ;        mov     ah,25h
  1492. ;        mov     al,09h
  1493. ;        int     21h
  1494.  
  1495. ;        mov     ah,48h                  ;allocate       starbuf
  1496. ;        mov     bx,1000h                ;64k
  1497. ;        int     21h
  1498. ;        mov     es,ax
  1499.  
  1500. ;        mov     ah,0                    ;init random seed
  1501. ;        int     1Ah                     ; to timer
  1502. ;        mov     word ptr r3[0],dx       ;
  1503. ;        mov     word ptr r3[2],cx       ;
  1504.  
  1505.  
  1506. ;        mov     ah,2                    ;scoreboard
  1507. ;        mov     bh,0
  1508. ;        mov     dh,24
  1509. ;        mov     dl,0
  1510. ;        int     10h ;???
  1511. ;        mov     dx,offset fuelS
  1512. ;        mov     ah,9
  1513. ;        int     21h
  1514.  
  1515.        jr $
  1516. INT_printstringdx
  1517. ;TODO
  1518.        _Loop_
  1519.  
  1520. INT_setgfx
  1521.        ld a,(_AL)
  1522.        cp 0x13
  1523.        jr nz,INT_setgfxq
  1524.         ld hl,_PUTscreen_do_patch_vgadata
  1525.         ld (_PUTscreen_do_patch),hl
  1526.         push de
  1527.         push iy
  1528.         ld e,0+0x80 ;keep
  1529.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  1530.         pop iy
  1531.         pop de
  1532. INT_setgfxq
  1533.        _Loop_
  1534.  
  1535. INT_printal
  1536.         push de
  1537.         ex af,af' ;'
  1538.         push af
  1539.         push iy
  1540.         ld a,(_AL)
  1541.         PRCHAR
  1542.         pop iy
  1543.         pop af
  1544.         ex af,af' ;'
  1545.         pop de
  1546.        _Loop_
  1547.  
  1548. INT16
  1549.         ;mov ah,0x01     ; Any key pressed?
  1550.         ;int 0x16
  1551.         ;jz fb26         ; No, go to main loop
  1552.        ld a,(_AH)
  1553.        or a
  1554.        jr z,INT_inputal
  1555.        dec a
  1556.        jr nz,INT_getkeyflags
  1557.         ld a,(prefetchedkey)
  1558.         or a
  1559.         jr nz,INT16havekey
  1560.         push de
  1561.         push iy
  1562.         OS_GETKEY
  1563.         pop iy
  1564.         pop de
  1565.         jr nz,INT16q ;no focus
  1566. INT16havekey
  1567.        ;ld a,0x48
  1568.         ld (prefetchedkey),a
  1569.         ld b,a
  1570.         ex af,af' ;'
  1571.         inc b
  1572.         dec b
  1573.         ex af,af' ;'
  1574.        _Loop_
  1575. INT_inputal
  1576. prefetchedkey=$+1
  1577.         ld a,0
  1578.         or a
  1579.         jr nz,INT_inputal_a
  1580.         push de
  1581.         push iy
  1582.         YIELDGETKEYLOOP;OS_GETKEY
  1583. ;        A - ъюф ёшьтюыр(ъэюяъш). ─юяєёЄшь√х ъюф√ ёьюЄЁш т 'sysdefs.asm' ёхъЎш  'Usable key codes'
  1584. ;        C - ъюф ёшьтюыр(ъэюяъш) схч єўхЄр Єхъє∙хую  ч√ъютюую ьюфшЇшърЄюЁр. ╩ръ яЁртшыю, шёяюы№чєхЄё  фы  юсЁрсюЄъш "уюЁ ўшї ъэюяюъ"
  1585. ;        DE - яючшЎш  ь√°ш (y,x) (тючтЁр∙рхЄ 0 яЁш юЄёєЄёЄтшш Їюъєёр)
  1586. ;        L - ъэюяъш ь√°ш (bits 0(LMB),1(RMB),2(MMB): 0=pressed; bits 7..4=яюыюцхэшх ъюы╕ёшър)
  1587. ;        LX - Kempston joystick (0bP2JFUDLR): 1=pressed, - яЁш юЄёєЄёЄтшш фцющёЄшър 0 (р эх 0xff)
  1588. ;        ╘ыру Z - хёыш 0(NZ), Єю юЄёєЄёЄтєхЄ Їюъєё.  
  1589.         pop iy
  1590.         pop de
  1591. INT_inputal_a
  1592.         ld (_AL),a
  1593.          ld c,1
  1594.          cp key_esc
  1595.          jr z,INT_inputal_a_scancodeq
  1596.          ld c,0x4b
  1597.          cp key_left
  1598.          jr z,INT_inputal_a_scancodeq
  1599.          ld c,0x4d
  1600.          cp key_right
  1601.          jr z,INT_inputal_a_scancodeq
  1602.          ld c,0x48
  1603.          cp key_up
  1604.          jr z,INT_inputal_a_scancodeq
  1605.          ld c,0x50
  1606.          cp key_down
  1607.          jr z,INT_inputal_a_scancodeq
  1608.          ld c,a
  1609. INT_inputal_a_scancodeq
  1610.          ld a,c
  1611.          ld (_AH),a ;scancode for pillman
  1612.         xor a
  1613.         ld (prefetchedkey),a
  1614. INT16q
  1615.        _Loop_
  1616. INT_getkeyflags
  1617. ;16h#2 (keyboard flags: al=0x10(scrolllock)+0x08(alt)+0x04(ctrl)+0x03(shifts))
  1618.         ld a,0xfe
  1619.         in a,(0xfe)
  1620.         cpl
  1621.         and 0x1f
  1622.         ld (_AL),a
  1623.        _Loop_
  1624.