Subversion Repositories NedoOS

Rev

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