?login_element?

Subversion Repositories NedoOS

Rev

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