?login_element?

Subversion Repositories NedoOS

Rev

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

  1.         DEVICE ZXSPECTRUM128
  2.         include "../_sdk/sys_h.asm"
  3.  
  4. STACK=0x4000
  5.  
  6. FILE888TO=0x4000 ;,0x4800
  7. FILE888FROM=0xb800
  8. T888FOUND=0x8800 ;temp
  9.  
  10. deblcscradr=0xc000
  11.  
  12. grfadr=#4000
  13. grfatr=grfadr+#84
  14.        
  15.         org PROGSTART
  16. cmd_begin
  17.  
  18.         ld sp,STACK
  19.        
  20.         ld e,3 ;6912
  21.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  22.        
  23.         OS_GETMAINPAGES
  24. ;dehl=номера страниц в 0000,4000,8000,c000
  25.         ld a,e
  26.         ld (codepg4000),a
  27.         ld a,h
  28.         ld (temppg8000),a
  29.         ld a,l
  30.         ld (highpgc000),a
  31.  
  32.         ;OS_GETSCREENPAGES
  33. ;de=страницы 0-го экрана (d=старшая), hl=страницы 1-го экрана (h=старшая)
  34.         ;ld a,e
  35.         ;ld (setpgs_scr_low),a
  36.         ;;ld (setpgs_scr_attr),a
  37.         ;ld a,d
  38.         ;ld (setpgs_scr_high),a
  39.         ;;ld (setpgs_scr_pixels),a
  40.         ;ld a,l
  41.         ;ld (setpgs_scr2_low),a
  42.         ;ld a,h
  43.         ;ld (setpgs_scr2_high),a
  44.        
  45.        
  46.         ld hl,COMMANDLINE
  47.         call skipword
  48.         call skipspaces
  49.         ld a,(hl)
  50.         or a
  51.         jr nz,$+5
  52.          ld hl,defaultfilename
  53.         push hl
  54.         call findlastdot ;out: de = after last dot or start
  55.         ex de,hl
  56. ;commandline might contain spaces after extension
  57.         ld de,curext
  58.         ldi
  59.         ld a,(hl)
  60.         sub ' '
  61.         ld (de),a
  62.         jr z,curextq
  63.         ldi
  64.         ld a,(hl)
  65.         sub ' '
  66.         ld (de),a
  67.         jr z,curextq
  68.         ldi
  69. curextq
  70.        
  71.         pop de
  72.        
  73.         ;ld de,filename
  74.         call openstream_file
  75.         or a
  76.         jr nz,openerror
  77.        
  78.         call setpgs_scr
  79.         ld hl,0xc000
  80.         ld bc,0x1800
  81.         call fillzero
  82.         ld bc,0x2ff
  83.         ld (hl),7
  84.         ldir
  85.  
  86.         call runext
  87.         jr nc,wrongfile;quit
  88.        
  89.         ;ld bc,quit
  90.         ;push bc
  91.        
  92.         ld a,(filehandle)
  93.         ld b,a
  94.         OS_GETFILESIZE ;dehl=filesize
  95.         ld a,h
  96.         sub 0x1b
  97.         or l
  98.         or d
  99.         or e
  100.         jr z,loadscr ;TODO ещё 6913
  101.         ld a,h
  102.         sub 0x18
  103.         or l
  104.         or d
  105.         or e
  106.         jr z,loadscr
  107.        if 1==0
  108.         ld a,h
  109.         sub 0x08
  110.         or l
  111.         or d
  112.         or e
  113.         jr z,loadfnt
  114.         ld a,h
  115.         sub 0x03
  116.         or l
  117.         or d
  118.         or e
  119.         jr z,loadfnt
  120.         ld a,h
  121.         sub 0x1b*2
  122.         or l
  123.         or d
  124.         or e
  125.         jp z,loadimg
  126.         ld a,h
  127.         sub 0x18*3
  128.         or l
  129.         or d
  130.         or e
  131.         jr z,load3
  132.        endif
  133.  
  134.  
  135. ;wrong file
  136.         call closestream_file
  137.        
  138. wrongfile
  139. openerror
  140.         ld hl,-1
  141.         ;jr quit
  142. ;quit
  143.         QUIT
  144.  
  145. ;readerror
  146. ;;TODO restore stack
  147. ;        call closestream_file
  148. ;        jr error
  149.  
  150. loadscr
  151. ;hl=size
  152. ;TODO кнопку A выключения/переключения атрибутов
  153.         ld de,0xc000
  154.         call readstream_file
  155.         call closestream_file
  156. waitkeyquit
  157. control0
  158.         call yieldgetkeynolang
  159.         jr z,control0
  160. waitkeyq        
  161.         ld hl,0
  162. ;проверяем стрелки
  163.         cp key_left
  164.         jr z,quitwithkey
  165.         cp key_right
  166.         jr z,quitwithkey
  167.         cp key_up
  168.         jr z,quitwithkey
  169.         cp key_down
  170.         jr z,quitwithkey
  171.         QUIT
  172. quitwithkey
  173. ;возвращаем код клавиши (для nv)
  174.         ld l,a
  175.         QUIT
  176.  
  177. loadplc
  178. ;hl=size
  179.         ld de,0x6000
  180.         push de
  181.         call readstream_file
  182.         call closestream_file
  183.         pop hl
  184.         call deblc
  185.         jr waitkeyquit
  186.        
  187. loadfnt
  188. ;hl=size
  189.         ld de,0xc000
  190.         push de
  191.         call readstream_file
  192.         call closestream_file
  193.         pop hl
  194. ;на случай линейного шрифта - рисуем его снизу
  195.         ld e,0
  196. loadfnt0
  197.         ld d,0xd0
  198.         ld b,8
  199. loadfnt1
  200.         ld a,(hl)
  201.         inc hl
  202.         ld (de),a
  203.         inc d
  204.         djnz loadfnt1
  205.         inc e
  206.         jr nz,loadfnt0
  207.         jr waitkeyquit
  208.        
  209. loadmlt
  210.         call read4000
  211.         call closestream_file
  212.         call cleanafter8000
  213.         ld e,2
  214.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  215.         ld hl,0x4000
  216.         ld de,0xc000+4 ;pixels
  217.         call convmgpixelscr_hlde
  218.         ;ld hl,convmcattrline
  219.         ;ld (convmgpixelscr_linepatch),hl
  220.         ld hl,0x5800
  221.         ld de,0x8000+4 ;attrs
  222.         ld bc,0xc001 ;b=hgt in chrs ;c=hgt of chr
  223.         call convmgattrs
  224.         ;ld lx,40
  225.         ;call convmgattrlines
  226.         ;call convmgpixelscr_hlde
  227.         ;ld hl,convmcline
  228.         ;ld (convmgpixelscr_linepatch),hl
  229.         jp waitkeyquit
  230.  
  231. loadmc
  232.         call read4000
  233.         call closestream_file
  234.         call cleanafter8000
  235.         ld e,2
  236.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  237.         call convmcscr
  238.         jp waitkeyquit
  239.  
  240. convmcscr
  241.         ld hl,0x4000
  242.         ld de,0xc000+4 ;pixels
  243.         ld b,192
  244. loadmclines0
  245.         push bc
  246.         call convmcline
  247.         ex de,hl
  248.         ld c,40
  249.         add hl,bc
  250.         ex de,hl
  251.         pop bc
  252.         djnz loadmclines0
  253.         ;ld bc,0xc001
  254.         ;jr convmgattrs
  255. ;convmcattrs
  256.         ld de,0x8000+4 ;attrs
  257.         ld bc,0xc020
  258. convmcattrlines
  259. convmcattrlines0
  260.         push bc
  261.         ld b,0
  262.         call convmcattrline
  263.         ex de,hl
  264.         ld c,40
  265.         add hl,bc
  266.         ex de,hl
  267.         pop bc
  268.         djnz convmcattrlines0
  269.         ret
  270.        
  271. readconvmg1attrs
  272.         ld hl,0x0c00
  273.         call read4000
  274.         ld de,0x8000+4+8 ;attrs
  275.         ld bc,0xc010
  276.         jr convmcattrlines
  277.  
  278. readconvmg1attrs8
  279.         ld hl,0x0c00
  280.         call read4000
  281.         ld de,0x8000+4 ;attrs
  282.         ld b,24
  283. convmg1attr8lines0
  284.         push bc
  285.         ld b,8
  286. convmg1attr8lines1
  287.         push hl
  288.         push bc
  289.         ld bc,8
  290.         call convmcattrline
  291.         ex de,hl
  292.         ld c,24
  293.         add hl,bc
  294.         ex de,hl
  295.         ld c,8
  296.         call convmcattrline
  297.         ex de,hl
  298.         ld c,40-24
  299.         add hl,bc
  300.         ex de,hl
  301.         pop bc
  302.         pop hl
  303.         djnz convmg1attr8lines1
  304.         ld c,16
  305.         add hl,bc
  306.         pop bc
  307.         djnz convmg1attr8lines0
  308.         ret
  309.        
  310. readconvmgattrs
  311.         push bc
  312.         call read4000
  313.         pop bc
  314. convmgattrs
  315. ;hl=from
  316. ;de=attrs addr
  317. ;b=hgt in chrs
  318. ;c=hgt of chr
  319.         ld de,0x8000+4 ;attrs
  320.         ld lx,40
  321. convmgattrlines
  322. ;hl=from
  323. ;de=attrs addr
  324. ;b=hgt in chrs
  325. ;c=hgt of chr
  326. ;lx=40/80 step
  327. convmg2attrlines0
  328.         push bc
  329.         ld b,c;2
  330. convmg2attrlines1
  331.         push hl
  332.         push bc
  333.         ld bc,32
  334.         call convmcattrline
  335.         ex de,hl
  336.         ld c,lx;40
  337.         add hl,bc
  338.         ex de,hl
  339.         pop bc
  340.         pop hl
  341.         djnz convmg2attrlines1
  342.         ld c,32
  343.         add hl,bc
  344.         pop bc
  345.         djnz convmg2attrlines0
  346.         ret
  347.        
  348. convmcattrline
  349.         push de
  350. convmcattrline0
  351.         ld a,(hl)
  352.         ld (de),a
  353.         set 5,d
  354.         ldi
  355.         res 5,d
  356.         jp pe,convmcattrline0
  357.         pop de
  358.         ret
  359.  
  360. convmcline
  361.         push de
  362.         ld b,32
  363. convmcline0
  364.         dup 4
  365.         rl (hl)
  366.         rla
  367.         add a,a
  368.         edup
  369.         ld c,a
  370.         rrca
  371.         or c
  372.         ld (de),a
  373.         set 5,d
  374.         dup 4
  375.         rl (hl)
  376.         rla
  377.         add a,a
  378.         edup
  379.         ld c,a
  380.         rrca
  381.         or c
  382.         ld (de),a
  383.         res 5,d
  384.         inc de
  385.         inc hl
  386.         djnz convmcline0
  387.         pop de
  388.         ret
  389.  
  390. readconvmgpixelscr
  391.         call cleanafter8000
  392.         call read40001800
  393.         ;ld hl,0x4000
  394.         ld de,0xc000+4 ;pixels
  395. convmgpixelscr_hlde
  396.         ld b,192
  397. convmglines0
  398.         push bc
  399.         push hl
  400.          ;ld bc,32 ;for convmcattrline
  401. ;convmgpixelscr_linepatch=$+1
  402.         call convmcline ;/convmcattrline
  403.         pop hl
  404.         call downhl
  405.         ex de,hl
  406.         ld c,40
  407.         add hl,bc
  408.         ex de,hl
  409.         pop bc
  410.         djnz convmglines0
  411.         ret
  412.        
  413. loadmcx
  414.         call cleanafter8000
  415.         ld e,2
  416.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  417.         ld hl,0x1800*2
  418.         call read4000
  419.         call convmcscr
  420.         call setpgs_scr2
  421.         call cleanafter8000
  422.         ld hl,0x1800*2
  423.         call read4000
  424.         call convmcscr
  425. loadmcxq
  426.         call closestream_file
  427.         jp waitkeyblink
  428.  
  429. loadmg2
  430.         ld bc,0x6002
  431.         ld hl,0x0c00
  432.         jr loadmg_go
  433. loadmg4
  434.         ld bc,0x3004
  435.         ld hl,0x0600
  436.         jr loadmg_go
  437. loadmg8
  438.         ld bc,0x1808
  439.         ld hl,0x0300
  440. loadmg_go
  441.         push bc
  442.         push hl
  443.         call cleanafter8000
  444.         ld e,2
  445.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  446.         ld hl,0x100 ;header
  447.         call read4000
  448.         call readconvmgpixelscr
  449.         call setpgs_scr2
  450.         call readconvmgpixelscr
  451.         call setpgs_scr
  452.         pop hl
  453.         pop bc
  454.         push bc
  455.         push hl
  456.         call readconvmgattrs
  457.         call setpgs_scr2
  458.         pop hl
  459.         pop bc
  460.         call readconvmgattrs
  461.         jr loadmcxq
  462.  
  463. loadmg1
  464.         call cleanafter8000
  465.         ld e,2
  466.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  467.         ld hl,0x100 ;header
  468.         call read4000
  469.         call readconvmgpixelscr
  470.         call setpgs_scr2
  471.         call readconvmgpixelscr
  472.         call setpgs_scr
  473.         call readconvmg1attrs
  474.         call setpgs_scr2
  475.         call readconvmg1attrs
  476.         call setpgs_scr
  477.         call readconvmg1attrs8
  478.         call setpgs_scr2
  479.         call readconvmg1attrs8
  480.         jr loadmcxq
  481.  
  482. read40001800
  483.         ld hl,0x1800
  484. read4000
  485.         ld de,0x4000
  486.         push de
  487.         call readstream_file
  488.         pop hl
  489.         ret
  490.        
  491.  
  492. loadgrf
  493. ;hl=size
  494.         push hl
  495.         call cleanafter8000
  496.         ld e,2
  497.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  498.         pop hl
  499.         call setpgtemp8000
  500.         ld de,grfadr
  501.         push de
  502.         call readstream_file
  503.         call closestream_file
  504.         pop hl;LD HL,grfadr
  505.         LD DE,TPAL
  506.         push de
  507.         CALL GRFPAL
  508.         pop de;LD de,TPAL
  509.         OS_SETPAL
  510.         CALL GRF2ATM
  511.         jp waitkeyquit
  512. TPAL
  513.         ds 32
  514.  
  515. cleanafter8000
  516.         ld hl,0x8000
  517.         ld bc,0xffff-0x8000
  518.         jp fillzero
  519.  
  520. loadrmode
  521. ;scr1 (6144 спрайтом) (первый фрейм)
  522. ;scr2 (6144 спрайтом) (второй фрейм)
  523. ;attr1 (768) ;G/M/C - низ(нечет) первого фрейма
  524. ;attr2 (768) ;R/C/M - низ(нечет) второго фрейма
  525. ;attr3 (768) ;B/Y - верх(чёт) второго фрейма - переставим на 1-й из-за интерлейса
  526. ;attr4 (768) ;W - верх(чёт) первого фрейма - переставим на 2-й из-за интерлейса
  527.         call cleanafter8000
  528.         ld e,2
  529.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  530.         call read40001800
  531.         call convmcscr
  532.         call setpgs_scr2
  533.         call cleanafter8000
  534.         call read40001800
  535.         call convmcscr
  536. ;attr1 (768) ;G/M/C - низ(нечет) первого фрейма
  537.         call setpgs_scr
  538.         ld de,0x8000+4+40 ;attrs
  539.         call readrmodeattrs
  540. ;attr2 (768) ;R/C/M - низ(нечет) второго фрейма
  541.         call setpgs_scr2
  542.         ld de,0x8000+4+40 ;attrs
  543.         call readrmodeattrs
  544. ;attr3 (768) ;B/Y - верх(чёт) второго фрейма - переставим на 1-й из-за интерлейса
  545.         call setpgs_scr
  546.         call readrmodeattrs_top
  547. ;attr4 (768) ;W - верх(чёт) первого фрейма - переставим на 2-й из-за интерлейса
  548.         call setpgs_scr2
  549.         call readrmodeattrs_top
  550.         jp loadmcxq
  551.  
  552. readrmodeattrs_top
  553.         ld de,0x8000+4 ;attrs
  554. readrmodeattrs
  555. ;de=attrs
  556.         push de
  557.         ld hl,0x300
  558.         call read4000
  559.         pop de
  560.         ld bc,0x1804
  561.         ld lx,80
  562.         jp convmgattrlines
  563.        
  564.         if 1==0
  565. ;TODO
  566.         call setEGA ;keeps hl
  567.         ld de,0x4000
  568.         call readstream_file
  569.         call closestream_file
  570. ;0. найти все цвета attr1,attr2,attr3,attr4
  571. ;1. сгенерировать палитру (все комбинации attr4+attr3 2*3 шт, все комбинации attr1+attr2 4*4 шт) со ссылками на спецпалитру
  572. ;2. включить спецпалитру
  573. ;3. сконвертировать пиксели с учётом атрибутов
  574.  
  575.         LD de,TRMODEPAL
  576.         OS_SETPAL
  577.        
  578.         jp waitkeyquit
  579.        
  580. TRMODEPAL
  581. ;0, r, c, m, g, y, gc, w, mr, mc, [M], [C], bw, yw, [rw], [cw]
  582. ;используем уровни 8 (2 на ATM), 15 (3 на ATM)
  583. _0=5*0
  584. _1=5*1;8
  585. _2=5*2;15
  586. ;DDp palette: %grbG11RB(low),%grbG11RB(high), инверсные
  587. ;high B, high b, low B, low b
  588.         macro palcol r,g,b ;0..15
  589.         db 0xff - (((g&1)<<7) + ((r&1)<<6) + ((b&1)<<5) + ((g&2)<<3) + (r&2) + ((b&2)>>1))
  590.         db 0xff - (((g&4)<<5) + ((r&4)<<4) + ((b&4)<<3) + ((g&8)<<1) + ((r&8)>>2) + ((b&8)>>3))
  591.         endm
  592.         palcol _0,_0,_0 ;0
  593.         palcol _1,_0,_0 ;r
  594.         palcol _0,_1,_1 ;c
  595.         palcol _1,_0,_1 ;m
  596.         palcol _0,_1,_0 ;g
  597.         palcol _1,_1,_0 ;y
  598.         palcol _0,_2,_1 ;gc
  599.         palcol _1,_1,_1 ;w
  600.         palcol _2,_0,_1 ;mr
  601.         palcol _1,_1,_2 ;mc
  602.         palcol _2,_0,_2 ;[M]
  603.         palcol _0,_2,_2 ;[C]
  604.         palcol _1,_1,_2 ;bw
  605.         palcol _2,_2,_1 ;yw
  606.         palcol _2,_1,_1 ;[rw]
  607.         palcol _1,_2,_2 ;[cw]
  608.         endif
  609.        
  610. load16c
  611.         ;jr $
  612.         call setEGA ;keeps hl
  613.         ld hl,0x8000
  614.         ld de,0x8000
  615.         call readstream_file
  616.         ld de,TPAL;curpal
  617.         ld hl,32
  618.         call readstream_file
  619.         call closestream_file
  620.         ld de,TPAL;curpal
  621.         OS_SETPAL
  622.         jp waitkeyquit
  623.  
  624.        
  625. load3
  626. ;B,R,G
  627. ;hl=size
  628.         call setEGA ;keeps hl
  629.  
  630. ;0.чёрная палитра (уже)
  631. ;1.загрузим в 0x4000
  632. ;2.перекодируем в 0x8800
  633. ;3.копируем в 0x8000
  634. ;4.нормальная палитра
  635.         ld de,0x4000
  636.         call readstream_file
  637.         call closestream_file
  638. conv3
  639.         call cleanafter8800
  640.         ld hl,0x4000
  641.         ld de,0x8800 +4
  642.         ld b,192
  643. load3lines
  644.         push bc
  645.         call load3line ;out: de=next line
  646.         call downhl
  647.         pop bc
  648.         djnz load3lines
  649. conv3q
  650.         ld hl,0x8800
  651.         ld de,0x8000
  652.         call load3copylayer
  653.         ld de,0xa000
  654.         call load3copylayer
  655.         ld de,0xc000
  656.         call load3copylayer
  657.         ld de,0xe000
  658.         call load3copylayer
  659.         ld de,palstandard
  660.         OS_SETPAL
  661.         jp waitkeyquit
  662.  
  663. loady
  664. ;packed R,G,B (run from 0xb800, depack to 0xb800, depacker at 0x5b00)
  665.         call setEGA ;keeps hl
  666.         ld de,0xb800
  667.         call readstream_file
  668.         call closestream_file
  669.         ld a,(0xb800)
  670.         cp 0xf3
  671.         ret nz
  672.         call 0xb800
  673.         ld hl,0xb800
  674.         ld de,0x4000+0x1800
  675.         ld bc,0x1800*2
  676.         ldir
  677.         ld de,0x4000
  678.         ld bc,0x1800
  679.         ldir
  680.         ;ld b,192
  681.         jr conv3;loadplusq
  682.  
  683. loadplus
  684. ;MultiStudio
  685. ;B,R,G sprites (hgt=128)
  686. ;hl=size
  687.         call setEGA ;keeps hl
  688. ;0.чёрная палитра (уже)
  689. ;1.загрузим в 0x4000
  690. ;2.перекодируем в 0x8800
  691. ;3.копируем в 0x8000
  692. ;4.нормальная палитра
  693.         ld de,0x4000
  694.         ld hl,0x1000
  695.         call readstream_file
  696.         ld de,0x4000+0x1800
  697.         ld hl,0x1000
  698.         call readstream_file
  699.         ld de,0x4000+(2*0x1800)
  700.         ld hl,0x1000
  701.         call readstream_file
  702.         call closestream_file
  703.         call cleanafter8800
  704.         ld b,128
  705. loadplusq
  706.         ld hl,0x4000
  707.         ld de,0x8800 +4
  708. loadpluslines
  709.         push bc
  710.         call load3line ;out: de=next line
  711.         ld bc,32
  712.         add hl,bc
  713.         pop bc
  714.         djnz loadpluslines
  715.         jp conv3q
  716.        
  717. loadimg
  718.         ld de,0xc000
  719.         ld hl,0x1b00
  720.         push de
  721.         push hl
  722.         call readstream_file
  723.         call setpgs_scr2
  724.         pop hl
  725.         pop de
  726.         call readstream_file
  727.         call closestream_file
  728. waitkeyblink
  729. controlimg0
  730.         ld a,1
  731.         xor 0
  732.         ld ($-1),a
  733.         ld e,a
  734.         OS_SETSCREEN ;e=screen=0..1
  735.         call yieldgetkeynolang
  736.         jr z,controlimg0
  737.         jp waitkeyq
  738.        
  739. load888
  740.         call setEGA ;keeps hl
  741.         ;jr $
  742.         ld de,FILE888FROM
  743.         call readstream_file
  744.         call closestream_file
  745.         call DEP888
  746.         jp conv3
  747.        
  748. cleanafter8800
  749.         ld hl,0x8800
  750.         ld bc,0xffff-0x8800
  751.         jp fillzero
  752.  
  753. palstandard
  754.         STANDARDPAL
  755. palblack
  756.         ds 32,0xf3
  757.  
  758. load3copylayer
  759.         ld bc,40*192
  760.         ldir
  761.         push hl
  762.         ex de,hl
  763.         ld bc,40*(200-192)-1
  764.         call fillzero
  765.         pop hl
  766.         ret
  767.  
  768. load3line
  769.         ;push de
  770.         call load3subline
  771.         ;set 6,d
  772.         ld bc,40*192*2
  773.         ex de,hl
  774.         add hl,bc
  775.         ex de,hl
  776.         call load3subline
  777.         ;res 6,d
  778.         ;set 5,d
  779.         ld bc,-(40*192)
  780.         ex de,hl
  781.         add hl,bc
  782.         ex de,hl
  783.         call load3subline
  784.         ;set 6,d
  785.         ld bc,40*192*2
  786.         ex de,hl
  787.         add hl,bc
  788.         ex de,hl
  789.         call load3subline
  790.         ld bc,40-(40*192*3)
  791.         ex de,hl
  792.         add hl,bc
  793.         ex de,hl
  794.         ret
  795.  
  796. load3subline
  797.         push de
  798.         push hl
  799.         ld a,h
  800.         ld (load3_h0),a
  801.         ld (load3_h0a),a
  802.         add a,0x18
  803.         ;ld (load3_h1),a
  804.         ;ld (load3_h1a),a
  805.         ld b,a
  806.         add a,0x18
  807.         ;ld (load3_h2),a
  808.         ;ld (load3_h2a),a
  809.         ld c,a
  810. load3subline0
  811. ;load3_h2=$+1
  812.         ld h,c;0
  813.         rl (hl)
  814.         rla
  815. ;load3_h1=$+1
  816.         ld h,b;0
  817.         rl (hl)
  818.         rla
  819. load3_h0=$+1
  820.         ld h,0
  821.         rl (hl)
  822.         rla
  823.         ;a=%GRB
  824.         add a,a
  825.         add a,a
  826.         ;a=%GRB00
  827. ;load3_h2a=$+1
  828.         ld h,c;0
  829.         rl (hl)
  830.         rla
  831. ;load3_h1a=$+1
  832.         ld h,b;0
  833.         rl (hl)
  834.         rla
  835. load3_h0a=$+1
  836.         ld h,0
  837.         rl (hl)
  838.         rla
  839.         ;a=%GRB00grb
  840.         rlca
  841.         rlca
  842.         rlca
  843.         ;a=%00grbGRB
  844.         ld (de),a
  845.         inc de
  846.         inc l
  847.         ld a,l
  848.         and 0x1f
  849.         jr nz,load3subline0
  850.         pop hl
  851.         pop de
  852.         ret
  853.  
  854. downhl
  855.         inc h
  856.         ld a,h
  857.         and 7
  858.         ret nz
  859.         ld a,l
  860.         add a,32
  861.         ld l,a
  862.         ret c
  863.         ld a,h
  864.         sub 8
  865.         ld h,a
  866.         ret
  867.        
  868. setEGA
  869. ;keeps hl
  870.         push hl
  871.         ld de,palblack
  872.         OS_SETPAL
  873.         ld e,0
  874.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  875.         ld hl,0x8000
  876.         ld bc,0x7fff
  877.         call fillzero
  878.         pop hl
  879.         ret
  880.  
  881. fillzero
  882.         ld d,h
  883.         ld e,l
  884.         inc de
  885.         ld (hl),0
  886.         ldir
  887.         ret
  888.  
  889. yieldgetkeynolang
  890. ;out: z=nokey
  891.         YIELDGETKEY
  892.         ld a,c
  893.         ret
  894.  
  895. setpgcode4000
  896. codepg4000=$+1
  897.         ld a,0
  898.         SETPG16K
  899.         ret
  900.  
  901. setpgtemp8000
  902. temppg8000=$+1
  903.         ld a,0
  904.         SETPG32KLOW
  905.         ret
  906.  
  907. setpghighc000
  908. highpgc000=$+1
  909.         ld a,0
  910.         SETPG32KHIGH
  911.         ret
  912.  
  913. setpgs_scr
  914.         ld a,(user_scr0_low) ;ok
  915.         SETPG32KLOW
  916.         ld a,(user_scr0_high) ;ok
  917.         SETPG32KHIGH
  918.         ret
  919.        
  920. setpgs_scr2
  921.         ld a,(user_scr1_low) ;ok
  922.         SETPG32KLOW
  923.         ld a,(user_scr1_high) ;ok
  924.         SETPG32KHIGH
  925.         ret
  926.  
  927. skipword
  928. ;hl=string
  929. ;out: hl=terminator/space addr
  930. getword0
  931.         ld a,(hl)
  932.         or a
  933.         ret z
  934.         cp ' '
  935.         ret z
  936.         inc hl
  937.         jr getword0
  938.  
  939. skipspaces
  940. ;hl=string
  941. ;out: hl=after last space
  942.         ld a,(hl)
  943.         cp ' '
  944.         ret nz
  945.         inc hl
  946.         jr skipspaces
  947.  
  948. ;hl = poi to filename in string
  949. ;out: de = after last dot or start
  950. findlastdot
  951.         ld d,h
  952.         ld e,l ;de = after last dot
  953. findlastdot0
  954.         ld a,[hl]
  955.         inc hl
  956.         or a
  957.         ret z
  958.         cp '.'
  959.         jr nz,findlastdot0
  960.         jr findlastdot
  961.  
  962. strcplow
  963. ;hl=s1 (lowercase)
  964. ;de=s2 (any case)
  965. ;out: Z (equal, hl=terminator of s1+1, de=terminator of s2+1), NZ (not equal, hl=erroraddr in s1, de=erroraddr in s2)
  966. strcplow0.
  967.         ld a,[de] ;s2
  968.          or a
  969.          jr z,$+4
  970.          or 0x20
  971.         cp [hl] ;s1
  972.         ret nz
  973.         inc hl
  974.         inc de
  975.         or a
  976.         jr nz,strcplow0.
  977.         ret ;z
  978.  
  979. runext
  980. ;out: CY=error
  981.         ld hl,extlist ;list of internal commands
  982. strcpexec0
  983.         ld c,(hl)
  984.         inc hl
  985.         ld b,(hl)
  986.         inc hl
  987.         ld a,b
  988.         cp -1
  989.         jr z,runext_error ;a!=0: no such ext
  990.         ld de,curext
  991.         push hl
  992.         call strcplow
  993.         pop hl
  994.         jr nz,strcpexec_fail
  995.         ld (runextaddr),bc
  996.         ld a,(filehandle)
  997.         ld b,a
  998.         OS_GETFILESIZE ;dehl=filesize
  999. runextaddr=$+1
  1000.         call 0
  1001.         or a
  1002.         ret
  1003. strcpexec_fail
  1004.         ld b,-1 ;чтобы точно найти терминатор
  1005.         xor a
  1006.         cpir ;найдём обязательно
  1007.         jr strcpexec0
  1008.  
  1009. runext_error
  1010. ;no such ext
  1011.         scf
  1012.         ret
  1013.        
  1014. extlist
  1015.         dw loadplus
  1016.         db "+",0
  1017.         dw loadplus
  1018.         db "-",0
  1019.         dw load3
  1020.         db "3",0
  1021.         dw load888
  1022.         db "888",0
  1023.         dw loadfnt
  1024.         db "fnt",0
  1025.         dw loady
  1026.         db "y",0
  1027.         dw loadimg
  1028.         db "img",0
  1029.         dw loadplc
  1030.         db "plc",0
  1031.         dw loadgrf
  1032.         db "grf",0
  1033.         dw loadmc
  1034.         db "mc",0
  1035.         dw loadmcx
  1036.         db "mcx",0
  1037.         dw loadchr
  1038.         db "ch$",0
  1039.         dw loadmg1
  1040.         db "mg1",0
  1041.         dw loadmg2
  1042.         db "mg2",0
  1043.         dw loadmg4
  1044.         db "mg4",0
  1045.         dw loadmg8
  1046.         db "mg8",0
  1047.         dw loadrmode
  1048.         db "rm",0
  1049.         dw load16c
  1050.         db "16c",0
  1051.         dw loadmlt
  1052.         db "mlt",0
  1053.        
  1054.         dw -1 ;end of list
  1055.        
  1056.  
  1057.        
  1058. defaultfilename
  1059.         db "m:/scr/rockwell.888",0
  1060. curext
  1061.         ds 3
  1062.         db 0
  1063.  
  1064. ;oldtimer
  1065. ;        dw 0
  1066.        
  1067.        
  1068.         include "deblc.asm"
  1069.         include "chr.asm"
  1070.         include "888.asm"
  1071.         include "grf.asm"
  1072.         include "../_sdk/file.asm"
  1073.        
  1074. cmd_end
  1075.  
  1076.         display "Size ",/d,cmd_end-cmd_begin," bytes"
  1077.  
  1078.         savebin "view.com",cmd_begin,cmd_end-cmd_begin
  1079.        
  1080.         ;LABELSLIST "../us/user.l"
  1081.