?login_element?

Subversion Repositories NedoOS

Rev

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

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