Subversion Repositories NedoOS

Rev

Rev 1277 | Rev 1306 | Go to most recent revision | 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.         ld e,2+0x80 ;keep
  15.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  16.         ;ld e,0
  17.         ;OS_SETSCREEN
  18.         ;ld e,0
  19.         ;OS_CLS
  20.         ;ld e,1
  21.         ;OS_SETSCREEN
  22.         ;ld e,0
  23.         ;OS_CLS
  24.  
  25.         ld sp,STACK
  26.         ;ld de,diskname
  27.         ;OS_OPENHANDLE
  28.         ;ld a,b
  29.         ;ld (diskhandle),a
  30.  
  31.         OS_GETMAINPAGES ;out: d,e,h,l=pages in 0000,4000,8000,c000, c=flags, b=id
  32.         ld a,e
  33.         ld (pgprog),a
  34.         ;ld a,h
  35.         ;ld (tpgs+0xcf),a ;pgrom0 (#0x3f)
  36.        push hl
  37.         ld e,h
  38.         OS_DELPAGE
  39.        pop hl
  40.         ld e,l
  41.         OS_DELPAGE
  42.  
  43.         ld a,(user_scr0_high) ;ok
  44.         ld e,0xaa
  45.         call clpga_e
  46.         ld a,(user_scr0_low) ;ok
  47.         ld e,7
  48.         call clpga_e
  49.  
  50.         ;ld de,tallmem
  51.         ;OS_OPENHANDLE
  52.         ;ld a,b
  53.         ;ld (curhandle),a
  54.  
  55.         ld hl,tpgs
  56.         ld b,4
  57. filltpgs0
  58.         push bc
  59.         push hl
  60.         OS_NEWPAGE
  61.         pop hl
  62.        push de
  63.        push hl
  64.        ld a,e
  65.        ;call c,clpga
  66.        call clpga
  67.         ;SETPGC000
  68.         ;ld de,0xc000
  69.         ;ld hl,0x4000
  70.         ;call readcurhandle
  71.        pop hl
  72.        pop de
  73. filltpgs0_noclear
  74.         pop bc
  75.        ld a,l
  76.        rrc l
  77.        rrc l
  78.         ld (hl),e
  79.        ld l,a
  80.         inc l
  81.         djnz filltpgs0
  82.  
  83.         ;call closecurhandle
  84.  
  85.         ld de,oldpath
  86.         OS_GETPATH
  87.  
  88.         ld de,path
  89.         OS_CHDIR
  90.  
  91.         ld de,trom0 ;de=filename
  92.         ld hl,0x8000 ;addr in segment
  93.         call loadcompp
  94.         ld de,trom1 ;de=filename
  95.         ld hl,0xa000 ;addr in segment
  96.         call loadcompp
  97.         ld de,trom2 ;de=filename
  98.         ld hl,0xc000 ;addr in segment
  99.         call loadcompp
  100.         ld de,trom3 ;de=filename
  101.         ld hl,0xe000 ;addr in segment
  102.         call loadcompp
  103.  
  104.         ld de,oldpath
  105.         OS_CHDIR
  106.  
  107.         call swapimer ;сначала прерывания ничего не делают (iff1==0)
  108.  
  109.         jp initq
  110.  
  111. resetpp
  112.         xor a
  113.         ld (iff1),a
  114.  
  115.         ;call INT_setgfxTEXT80
  116.  
  117.         ld hl,0x0200
  118.         ld (_SP),hl
  119.  
  120.        ld hl,0x8000
  121.  
  122. filenameaddr=$+1
  123.         ld de,0;tprog ;de=filename
  124.        ld a,d
  125.        or e
  126.        jr z,noloadfile
  127.         OS_OPENHANDLE
  128.         ld a,b
  129.         ld (curhandle),a
  130.         ld de,bkheader
  131.         ld hl,4 ;de=buffer, hl=size
  132.         call readcurhandle
  133.         ld de,(bkheader)
  134.         ;ld de,0x01fc
  135. ;de=addr
  136.        push de
  137.         ld hl,4 ;size defect
  138.         call loadcompp_noheader
  139.        pop hl ;=IP(PC)
  140.        ld a,h
  141.        cp 2
  142.        jr nc,noloadfile
  143. ;autostart: берём адрес из 0x01fe
  144.         ld a,(tpgs)
  145.         SETPGC000
  146.         ld hl,(0x01fe+0xc000)
  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. bkheader
  155.         ds 4
  156.  
  157. ;de=имя файла
  158. ;hl=куда грузим
  159. loadfile_in_hl
  160.         push hl ;куда грузим
  161.         OS_OPENHANDLE
  162.         pop de ;куда грузим
  163.         push bc ;b=handle
  164.         ld h,0x7f ;столько грузим (если столько есть в файле)
  165.         OS_READHANDLE
  166.         pop bc ;b=handle
  167.         OS_CLOSEHANDLE
  168.         ret
  169.  
  170. readcurhandle
  171. curhandle=$+1
  172.         ld b,0
  173.         OS_READHANDLE
  174.         ret
  175.  
  176. clpga
  177.         ld e,0
  178. clpga_e
  179.         SETPGC000
  180.         ld hl,0xc000
  181.        ld a,e
  182.         ld d,h
  183.         ld e,l
  184.         inc e
  185.         ld bc,0x3fff
  186.        ld (hl),a;0
  187.         ldir
  188.         ret
  189.  
  190. ;keep here for quit
  191. swapimer
  192.         di
  193.         ld de,0x0038
  194.         ld hl,oldimer
  195.         ld bc,3
  196. swapimer0
  197.         ld a,(de)
  198.         ldi ;[oldimer] -> [0x0038]
  199.         dec hl
  200.         ld (hl),a ;[0x0038] -> [oldimer]
  201.         inc hl
  202.         jp pe,swapimer0
  203.         ei
  204.         ret
  205.  
  206. farquiter
  207.         call swapimer
  208.         ld hl,0
  209.         QUIT
  210.  
  211. trom0
  212.         db "bk10_017_mon.rom",0
  213. trom1
  214.         db "bk10_106_basic1.rom",0
  215. trom2
  216.         db "bk10_107_basic2.rom",0
  217. trom3
  218.         db "bk10_108_basic3.rom",0
  219. ;tprog
  220. ;        db "textshow.bk",0
  221. path
  222.         db "bk",0
  223.  
  224. skipword
  225. ;hl=string
  226. ;out: hl=terminator/space addr
  227. getword0
  228.         ld a,(hl)
  229.         or a
  230.         ret z
  231.         cp ' '
  232.         ret z
  233.         inc hl
  234.         jr getword0
  235.  
  236. skipspaces
  237. ;hl=string
  238. ;out: hl=after last space
  239.         ld a,(hl)
  240.         cp ' '
  241.         ret nz
  242.         inc hl
  243.         jr skipspaces
  244.  
  245. loadcompp
  246. ;de=filename
  247. ;hl=addr
  248.        push hl
  249.         OS_OPENHANDLE
  250.         ld a,b
  251.         ld (curhandle),a
  252.        pop de ;addr
  253.        ld hl,0 ;no size defect
  254. loadcompp_noheader
  255. ;de=addr, hl=size defect
  256.         ld a,d
  257.         and 0xc0
  258.         ld c,a
  259.         ld b,tpgs/256
  260.         set 7,d
  261.         set 6,d
  262.        push bc
  263.        push de
  264.         ld a,(curhandle)
  265.         ld b,a
  266.        push hl ;size defect
  267.         OS_GETFILESIZE ;b=handle, out: dehl=file size
  268.        pop bc ;ld bc,4
  269.         or a
  270.         sbc hl,bc
  271.         jr nc,$+3
  272.         dec de
  273.        pop de
  274.        pop bc
  275. loadcompp0
  276. ;de=текущий адрес загрузки (c000+)
  277. ;hl=сколько байтов осталось грузить
  278. ;bc=tpgs+текущий номер страницы
  279.         push bc
  280.         ld a,(bc)
  281.         SETPGC000
  282.        push hl ;сколько байтов осталось грузить
  283.        add hl,de
  284.        sbc hl,de
  285.        jr nc,loadcompp_nocroppg
  286.        ld hl,1
  287.        ;scf
  288.        sbc hl,de
  289. loadcompp_nocroppg
  290.         call readcurhandle
  291.         ld b,h
  292.         ld c,l
  293.        pop hl ;сколько байтов осталось грузить
  294.        or a
  295.        sbc hl,bc
  296.        ld de,0xc000
  297.         pop bc
  298.         ld a,c
  299.         rlca
  300.         rlca
  301.         inc a
  302.         rrca
  303.         rrca
  304.         ld c,a ;next pg
  305.         ld a,h
  306.         or l
  307.         jr nz,loadcompp0
  308. closecurhandle
  309.         ld a,(curhandle)
  310.         ld b,a
  311.         OS_CLOSEHANDLE
  312.         ret
  313.  
  314. far_int
  315.         ret
  316.  
  317. oldpath
  318.         ds MAXPATH_sz
  319.