?login_element?

Subversion Repositories NedoOS

Rev

Rev 1345 | Blame | Compare with Previous | Last modification | View Log | Download

  1. init
  2.         ld hl,COMMANDLINE ;command line
  3.         call skipword
  4.         call skipspaces
  5.         ld a,(hl)
  6.         or a
  7.         jr z,noautoload
  8. ;command line = bk <file to load>"
  9.        ld (filenameaddr),hl
  10.        ;jr autoloadq
  11. noautoload
  12. ;autoloadq
  13.         OS_HIDEFROMPARENT
  14.  
  15.         ld sp,STACK
  16.  
  17.         ld a,0;1 ;pseudo-color
  18.         call setgfxmode
  19.  
  20.         ;ld de,diskname
  21.         ;OS_OPENHANDLE
  22.         ;ld a,b
  23.         ;ld (diskhandle),a
  24.  
  25.         OS_GETMAINPAGES ;out: d,e,h,l=pages in 0000,4000,8000,c000, c=flags, b=id
  26.         ld a,e
  27.         ld (pgprog),a
  28.        push hl
  29.         ld e,h
  30.         OS_DELPAGE
  31.        pop hl
  32.         ld e,l
  33.         OS_DELPAGE
  34.  
  35.         ld hl,tpgs
  36.         ld b,4
  37. filltpgs0
  38.         push bc
  39.         push hl
  40.         OS_NEWPAGE
  41.         pop hl
  42.        push de
  43.        push hl
  44.        ld a,e
  45.        call clpga
  46.        pop hl
  47.        pop de
  48. filltpgs0_noclear
  49.         pop bc
  50.        ld a,l
  51.        rrc l
  52.        rrc l
  53.         ld (hl),e
  54.        ld l,a
  55.         inc l
  56.         djnz filltpgs0
  57.  
  58.         ld de,oldpath
  59.         OS_GETPATH
  60.  
  61.         ld de,path
  62.         OS_CHDIR
  63.  
  64.         ld de,tlowmem ;de=filename
  65.         ld hl,0x0000 ;addr in segment
  66.         call loadcompp
  67.  
  68.         ld de,trom0 ;de=filename
  69.         ld hl,0x8000 ;addr in segment
  70.         call loadcompp
  71.         ld de,trom1 ;de=filename
  72.         ld hl,0xa000 ;addr in segment
  73.         call loadcompp
  74.         ld de,trom2 ;de=filename
  75.         ld hl,0xc000 ;addr in segment
  76.         call loadcompp
  77.         ld de,trom3 ;de=filename
  78.         ld hl,0xe000 ;addr in segment
  79.         call loadcompp
  80.  
  81.         ld de,oldpath
  82.         OS_CHDIR
  83.  
  84.         call swapimer ;сначала прерывания ничего не делают (iff1==0)
  85.  
  86.         jp initq
  87.  
  88. resetpp
  89.         xor a
  90.         ld (iff1),a
  91.  
  92.         ld hl,0x02d8
  93.         ld (bkscroll),hl
  94.  
  95.         ld a,(tpgs+0x00)
  96.        call clpga
  97.         call cls_bk
  98.         call cls_for_curgfxmode
  99.  
  100.         ld hl,0x01fe;0x0200
  101.         ld (_SP),hl
  102.  
  103.        ld hl,0x8000
  104.  
  105. filenameaddr=$+1
  106.         ld de,0;tprog ;de=filename
  107.        ld a,d
  108.        or e
  109.        jr z,noloadfile
  110.       push de
  111.       ex de,hl
  112.       call findlastdot
  113.       ld a,(de) ;de = after last dot
  114.       pop de
  115.       cp '0' ;костыль для теста .0bk
  116.       ld hl,4
  117.       jr nz,$+3
  118.       ld l,h
  119.       push hl
  120.         OS_OPENHANDLE
  121.         ld a,b
  122.         ld (curhandle),a
  123.         ld de,bkheader
  124.       pop hl
  125.       push hl ;header size
  126.         ;ld hl,4 ;de=buffer, hl=size
  127.         ld a,h
  128.         or l
  129.         call nz,readcurhandle
  130.       pop hl ;size defect
  131.         ld de,(bkheader)
  132.         ;ld de,0x01fc
  133. ;de=addr
  134.        push de
  135.         ;ld hl,4 ;size defect
  136.         call loadcompp_noheader
  137.        pop hl ;=IP(PC)
  138.        ld a,h
  139.        cp 2
  140.        jr nc,noloadfile
  141.      or a
  142.      jr z,loadfile_testq ;костыль для теста
  143. ;autostart: берём адрес из 0x01fe
  144.         ld a,(tpgs)
  145.         SETPGC000
  146.         ld hl,(0x01f6+0xc000) ;1f6 for newlode
  147. noloadfile
  148.        ex de,hl
  149.         LD IY,EMUCHECKQ
  150.         ;ld a,-1
  151.         ;ld (iff1),a
  152.      jp loopcjp;_LoopC_JP заменит текущую страницу
  153.  
  154. loadfile_testq
  155.         ld hl,0x0080
  156.         jr noloadfile
  157.  
  158. ;hl = poi to filename in string
  159. ;out: ;de = after last dot
  160. findlastdot
  161. nfopenfndot.
  162.         ld d,h
  163.         ld e,l ;de = after last dot
  164. nfopenfndot0.
  165.         ld a,[hl]
  166.         inc hl
  167.         or a
  168.         ret z
  169.         cp '.'
  170.         jr nz,nfopenfndot0.
  171.         jr nfopenfndot.
  172.  
  173. bkheader
  174.         dw 0 ;addr
  175.         dw 0 ;size (not used)
  176.  
  177. ;de=имя файла
  178. ;hl=куда грузим
  179. loadfile_in_hl
  180.         push hl ;куда грузим
  181.         OS_OPENHANDLE
  182.         pop de ;куда грузим
  183.         push bc ;b=handle
  184.         ld h,0x7f ;столько грузим (если столько есть в файле)
  185.         OS_READHANDLE
  186.         pop bc ;b=handle
  187.         OS_CLOSEHANDLE
  188.         ret
  189.  
  190. readcurhandle
  191. curhandle=$+1
  192.         ld b,0
  193.         OS_READHANDLE
  194.         ret
  195.  
  196. changegfxmode
  197. ;TODO защита от int!!!
  198.        di
  199.         ld a,(curgfxmode)
  200.         inc a
  201.         cp 3
  202.         jr c,$+3
  203.         xor a
  204.         call setgfxmode
  205.         call cls_for_curgfxmode
  206.         call redraw_for_curgfxmode
  207.        ei
  208.         ret
  209.  
  210. setgfxmode
  211.        ld (curgfxmode),a
  212. ;0=mono
  213. ;1=pseudo-color
  214. ;2=rgb
  215. ;...
  216.         or a
  217.         jr z,setgfxmode_mono
  218. ;1=pseudo-color
  219. ;2=rgb
  220.         cp 1
  221.         ld de,bkpal
  222.         jr z,$+5
  223.         ld de,rgbpal
  224.         OS_SETPAL
  225.        ld e,0+0x80 ;EGA+keep
  226.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  227.         ld hl,tleftpixels
  228. mkrecolor0
  229.         ld a,l ;%????RrLl ;%????LlRr
  230.         rrca
  231.         rrca   ;%Ll????Rr
  232.         rla
  233.         rla    ;%????Rr?L
  234.         rla    ;%???Rr?Ll
  235.         and 0x1b
  236.         ld (hl),a;000Rr0Ll
  237.         inc l
  238.         jr nz,mkrecolor0
  239.         ld a,PUTSCREEN_C_PATCH_COLOR
  240.         ld (putscreen_c_patch),a
  241.         ret
  242. setgfxmode_mono
  243.         ld e,2+0x80 ;MC+keep
  244.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  245.         ld de,standardpal
  246.         OS_SETPAL      
  247.         ld hl,tmirror
  248. mkmirror0
  249.         ld b,8
  250. mkmirror1
  251.         rlc l
  252.         rra
  253.         djnz mkmirror1
  254.         ld (hl),a
  255.         inc l
  256.         jr nz,mkmirror0
  257.         ld e,7 ;атрибут для mono
  258.         ld a,(user_scr0_low) ;ok
  259.        call clpga_e
  260.         ld a,PUTSCREEN_C_PATCH_MONO
  261.         ld (putscreen_c_patch),a
  262.         ret
  263.  
  264. ;keep here for quit
  265. swapimer
  266.         di
  267.         ld de,0x0038
  268.         ld hl,oldimer
  269.         ld bc,3
  270. swapimer0
  271.         ld a,(de)
  272.         ldi ;[oldimer] -> [0x0038]
  273.         dec hl
  274.         ld (hl),a ;[0x0038] -> [oldimer]
  275.         inc hl
  276.         jp pe,swapimer0
  277.         ei
  278.         ret
  279.  
  280. farquiter
  281.         call swapimer
  282.         ld hl,0
  283.         QUIT
  284.  
  285. tlowmem
  286.         db "bklowmem.bin",0
  287. trom0
  288.         db "bk10_017_mon.rom",0
  289. trom1
  290.         db "bk10_106_basic1.rom",0
  291. trom2
  292.         db "bk10_107_basic2.rom",0
  293. trom3
  294.         db "bk10_108_basic3.rom",0
  295. path
  296.         db "bk",0
  297.  
  298. skipword
  299. ;hl=string
  300. ;out: hl=terminator/space addr
  301. getword0
  302.         ld a,(hl)
  303.         or a
  304.         ret z
  305.         cp ' '
  306.         ret z
  307.         inc hl
  308.         jr getword0
  309.  
  310. skipspaces
  311. ;hl=string
  312. ;out: hl=after last space
  313.         ld a,(hl)
  314.         cp ' '
  315.         ret nz
  316.         inc hl
  317.         jr skipspaces
  318.  
  319. loadcompp
  320. ;de=filename
  321. ;hl=addr
  322.        push hl
  323.         OS_OPENHANDLE
  324.         ld a,b
  325.         ld (curhandle),a
  326.        pop de ;addr
  327.        ld hl,0 ;no size defect
  328. loadcompp_noheader
  329. ;de=addr, hl=size defect
  330.         ld a,d
  331.         and 0xc0
  332.         ld c,a
  333.         ld b,tpgs/256
  334.         set 7,d
  335.         set 6,d
  336.        push bc
  337.        push de
  338.         ld a,(curhandle)
  339.         ld b,a
  340.        push hl ;size defect
  341.         OS_GETFILESIZE ;b=handle, out: dehl=file size
  342.        pop bc ;ld bc,4
  343.         or a
  344.         sbc hl,bc
  345.         jr nc,$+3
  346.         dec de
  347.        pop de
  348.        pop bc
  349. loadcompp0
  350. ;de=текущий адрес загрузки (c000+)
  351. ;hl=сколько байтов осталось грузить
  352. ;bc=tpgs+текущий номер страницы
  353.         push bc
  354.         ld a,(bc)
  355.         SETPGC000
  356.        push hl ;сколько байтов осталось грузить
  357.        add hl,de
  358.        sbc hl,de
  359.        jr nc,loadcompp_nocroppg
  360.        ld hl,1
  361.        ;scf
  362.        sbc hl,de
  363. loadcompp_nocroppg
  364.         call readcurhandle
  365.         ld b,h
  366.         ld c,l
  367.        pop hl ;сколько байтов осталось грузить
  368.        or a
  369.        sbc hl,bc
  370.        ld de,0xc000
  371.         pop bc
  372.         ld a,c
  373.         rlca
  374.         rlca
  375.         inc a
  376.         rrca
  377.         rrca
  378.         ld c,a ;next pg
  379.         ld a,h
  380.         or l
  381.         jr nz,loadcompp0
  382. closecurhandle
  383.         ld a,(curhandle)
  384.         ld b,a
  385.         OS_CLOSEHANDLE
  386.         ret
  387.  
  388. far_int
  389.         ret
  390.  
  391. oldpath
  392.         ds MAXPATH_sz
  393.  
  394. ;DDp palette: %grbG11RB(low),%grbG11RB(high), inverted
  395. ;standard:
  396.         ;dw 0xffff,0xfefe,0xfdfd,0xfcfc,0xefef,0xeeee,0xeded,0xecec
  397.         ;dw 0xffff,0xdede,0xbdbd,0x9c9c,0x6f6f,0x4e4e,0x2d2d,0x0c0c
  398. ;ansi:
  399.         ;dw 0xffff,0xfdfd,0xefef,0xeded,0xfefe,0xfcfc,0xeeee,0xecec
  400.         ;dw 0x1f1f,0x1d1d,0x0f0f,0x0d0d,0x1e1e,0x1c1c,0x0e0e,0x0c0c
  401. bkpal
  402. ;0,W,orange,teal
  403.        dup 4
  404.         dw 0xffff,0x8d8d,0x5f5f,0x0c0c
  405.        edup
  406. rgbpal
  407. ;0,R,B,G:
  408.        dup 4
  409.         dw 0xffff,0xdede,0x6f6f,0xbdbd
  410.        edup
  411. standardpal
  412.         STANDARDPAL
  413.