?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1.         DEVICE ZXSPECTRUM128
  2.         include "../_sdk/sys_h.asm"
  3.  
  4. COLOR=7
  5. MDLADDR=0x6000;0xc000
  6.        
  7.                
  8.         org PROGSTART
  9. cmd_begin
  10.         ld sp,0x4000 ;не должен опускаться ниже #3b00! иначе возможна порча OS
  11.         OS_HIDEFROMPARENT
  12.         ld e,-1 ;textmode
  13.         OS_SETGFX
  14.         ;call initstdio
  15.  
  16.         OS_GETMAINPAGES ;out: dehl=номера страниц в 0000,4000,8000,c000, c=flags, b=id
  17.         ld a,e
  18.         ld (musicpage),a
  19.         ld a,b
  20.         ld (myid),a
  21.        if 0
  22.         ld a,h
  23.         ld (page8000),a
  24.         ld a,l
  25.         ld (pagec000),a
  26.        endif
  27.         ;push hl
  28.         ;ld e,h
  29.         ;OS_DELPAGE
  30.         ;pop hl
  31.         ;ld e,l
  32.         ;OS_DELPAGE
  33.  
  34. ;TODO найти копию себя в памяти и послать ей 0 в COMMANDLINE
  35.         ld e,1 ;no id 0
  36. cmd_proc0
  37.         push de
  38.         ld a,e
  39. myid=$+1
  40.         cp 0
  41.         jr z,cmd_proc_skip
  42.         OS_GETAPPMAINPAGES ;out: d,e,h,l=pages in 0000,4000,8000,c000, c=flags, a=error
  43.         or a
  44.         jr nz,cmd_proc_skip
  45.         ld a,d ;main page
  46.         SETPG32KHIGH
  47.         ;ld de,COMMANDLINE+0xc000
  48.          ld hl,COMMANDLINE+0xc000
  49.          call findlastslash.
  50.         ld hl,ttestdatacom
  51.         ld bc,ttestdatacom_sz
  52.         call teststr
  53.         jr z,cmd_proc_found
  54.         ;ld de,COMMANDLINE+0xc000
  55.          ld hl,COMMANDLINE+0xc000
  56.          call findlastslash.
  57.         ld hl,ttestdata
  58.         ld bc,ttestdata_sz
  59.         call teststr
  60.         jr nz,cmd_proc_skip
  61. cmd_proc_found
  62.         xor a
  63.         ld (COMMANDLINE+0xc000),a ;ok ;"закройся"
  64. cmd_proc_skip
  65.         pop de
  66.         inc e
  67.         ld a,e
  68.         inc a ;no id 0xff
  69.         jr nz,cmd_proc0
  70.  
  71. ;а как заглушить музыку, если не опрашивать клаву?
  72. ;если опрашивать, то нужен терминал
  73. ;можно было бы в nv.ext прописать cmd.com start term.com player.com, но такие конструкции пока не поддержаны ни в nv, ни в term
  74. ;поэтому пока без терминала
  75.        
  76.         ld hl,wasplayer
  77.         ld de,0x4000
  78.         ld bc,szplayer
  79.         ldir
  80.  
  81.        if 0
  82. page8000=$+1
  83.         ld a,0
  84.         SETPG8000
  85. pagec000=$+1
  86.         ld a,0
  87.         SETPGC000
  88.        endif
  89.        
  90.         ld hl,COMMANDLINE ;command line
  91.         call skipword
  92.         call skipspaces
  93.         ld a,(hl)
  94.         or a
  95.         jp z,noautoload
  96.         ld (filenameaddr),hl
  97. ;command line = "texted <file to load>"
  98.        push hl
  99.         call findlastdot ;out: de = after last dot or start
  100.         ld (extaddr),de
  101.        pop hl
  102.         ;ld (texted_filenameaddr),hl
  103.         ex de,hl ;de=drive/path/file
  104.         OS_OPENHANDLE
  105. ;b=new file handle
  106.  
  107. extaddr=$+1
  108.         ld hl,0
  109.         inc hl
  110.         inc hl
  111.         ld a,(hl)
  112.         or 0x20
  113.         cp 'd'
  114.         jp z,play_tfd
  115.         cp 'm'
  116.         jp z,play_tfm
  117.        
  118.         ld de,MDLADDR;0xc000
  119.         ld hl,0xffff&(-MDLADDR);0x4000
  120. ;B = file handle, DE = Buffer address, HL = Number of bytes to read
  121.         push bc
  122.         OS_READHANDLE
  123. ;hl = file size
  124.         pop bc
  125. ;B = file handle
  126.         push hl
  127.  
  128. ;B = file handle
  129.         OS_CLOSEHANDLE
  130.         pop ix
  131. ;ix = file size
  132.         call getptsconfig
  133. ;a = player config bits, hl = offset to the second module if available
  134.         ld (SETUP),a
  135.         ld (secondmoduleoffset), hl
  136.  
  137.         halt
  138.         ;инитим до инита трека, иначе не работает SAA
  139. musicpage=$+1
  140.         ld a,0
  141.         ld hl,player
  142.         OS_SETMUSIC ;пишет в AY
  143.        
  144.         di
  145.         ld hl,end_init
  146.         push hl
  147.         ld hl,MDLADDR
  148.         ld a,(MDLADDR + 0x0a)
  149.         cp 'E'
  150.         jp z,EPlayer_Init
  151.         ld a,(hl)
  152.         cp 'T'
  153.         jp z,tfmini
  154.  
  155. secondmoduleoffset=$+1
  156.         ld de,0
  157.         add de,hl ;address of the second module
  158.         jp INIT
  159. end_init
  160.         ei  
  161. mainloopredraw
  162.         ;ld e,COLOR
  163.         ;OS_CLS
  164. filenameaddr=$+1
  165. ;        ld hl,0
  166. ;        call prtext
  167. ;        ld a,0x0d
  168. ;        PRCHAR
  169. ;        ld a,0x0a
  170. ;        PRCHAR
  171.        
  172. mainloop
  173.         YIELD
  174.         ;di ;TODO fix player
  175.         ;call player
  176.         ;ei
  177.         ld a,(COMMANDLINE) ;ok
  178.         or a
  179.         jr z,quit
  180.        
  181.         GET_KEY
  182.         ld (savekey),a
  183.         ;cp key_redraw
  184.         ;jr z,mainloopredraw
  185.  
  186.         ;or a ;cp NOKEY ;keylang==0?
  187.         ;jr nz,$+2+1+2
  188.         ;cp c ;keynolang==0?
  189.         ;jr z,_1;1b;prwindow_waitkey_nokey
  190.         cp NOKEY
  191.         jr nz,quit
  192.  
  193.         LD A,(START+10)
  194.         RLA ;здесь для простоты следим только за первым модулем
  195.         JR NC,mainloop
  196.  
  197. quit
  198.           ld a,(musicpage)
  199.           ld hl,muter
  200.           OS_SETMUSIC
  201.           halt
  202. noautoload
  203.         ld hl,(savekey)
  204.         QUIT
  205. savekey
  206.         defw 00
  207.         defw 00
  208.  
  209. play_tfd
  210. ;b=handle
  211.         call loadtfd
  212.  
  213.         call tfd_ini
  214.         call tfmshut
  215.  
  216.         ld a,(musicpage)
  217.         ld hl,tfd_play
  218.         OS_SETMUSIC
  219.         jp mainloop
  220.  
  221. play_tfm
  222. ;b=handle
  223.         call loadtfd
  224.  
  225.         ;call tfm_ini
  226.  
  227.         halt
  228.         ld a,(musicpage)
  229.         ld hl,tfm_play
  230.         OS_SETMUSIC ;пишет в AY
  231.  
  232.         call tfmshut
  233.  
  234.         ld a,0xa0;%10101000 ;320x200 mode noturbo
  235.         ld bc,0xbd77    ;shadow ports and palette remain on
  236.         out (c),a
  237.  
  238.         LD DE,#FFBF
  239.         LD C,#FD
  240.         CALL selChip0
  241.         CALL clrSSG;tfminiPP
  242.         LD A,%11111000
  243.         EXA
  244.         LD A,7
  245.         CALL WRITEREG
  246.         CALL selChip1
  247.         CALL clrSSG;tfminiPP
  248.         LD A,%11101111
  249.         EXA
  250.         LD A,7
  251.         call WRITEREG
  252.  
  253.         LD A,0xa8;%10101000 ;320x200 mode
  254.         ld bc,0xbd77    ;shadow ports and palette remain on
  255.         out (c),a
  256.         jp mainloop
  257.  
  258. clrSSG
  259.         XOR A
  260.         EXA
  261.         LD A,#0D ;SSG
  262. regClrS0 CALL WRITEREG
  263.         DEC A
  264.         JP P,regClrS0
  265.         ret
  266.  
  267. loadtfd
  268. ;b=handle
  269.         ld a,b
  270.         ld (curhandle),a
  271.        if 1
  272.         ld hl,0
  273.         ld de,0
  274. nvview_load0
  275.         push de
  276.         push hl
  277.         call reservepage
  278.         pop hl
  279.         pop de
  280.         ret nz ;no memory
  281. ;nvview_load0nonewpg        
  282.         ld a,0xc000/256
  283.         call cmd_loadpage
  284.         jr nz,nvview_load0q
  285.         ex de,hl
  286.         add hl,bc
  287.         ex de,hl
  288.         jr nc,$+3
  289.         inc hl
  290.          ;TODO nvview_load0nonewpg with new pointer if no new page
  291.         ld a,b
  292.         or c
  293.         jr nz,nvview_load0
  294. nvview_load0q
  295. ;hlde=true file size (for TRDOSFS)
  296.         ;ld (filesize),de
  297.         ;ld (filesizeHSW),hl
  298.  
  299.         ld a,(curhandle)
  300.         ld b,a
  301.         OS_CLOSEHANDLE
  302.        else
  303.         ld de,tfmData
  304.         ld hl,0xffff&(-tfmData);0x4000
  305. ;B = file handle, DE = Buffer address, HL = Number of bytes to read
  306.         push bc
  307.         OS_READHANDLE
  308.         pop bc
  309.  
  310. ;B = file handle
  311.         OS_CLOSEHANDLE
  312.        endif
  313.         ret
  314.  
  315. reservepage
  316. ;new page, set page in textpages, npages++, set page in #c000
  317. ;nz=error
  318.         OS_NEWPAGE
  319.         or a
  320.         ret nz
  321. npages=$+1
  322.         ld hl,tpgs;textpages
  323.         ld (hl),e
  324.         inc l
  325.         ld (npages),hl
  326.         ld a,e
  327.         SETPGC000
  328.         xor a
  329.         ret ;z
  330.  
  331. cmd_loadpage
  332. ;out: a=error, bc=bytes read
  333. ;keeps hl,de
  334.         push de
  335.         push hl
  336.         ld d,a
  337.         xor a
  338.         ld l,a
  339.         ld e,a
  340.         sub d
  341.         ld h,a ;de=buffer, hl=size
  342.         call readcurhandle
  343.         ld b,h
  344.         ld c,l
  345.         pop hl
  346.         pop de
  347.         or a
  348.         ret
  349.  
  350. readcurhandle
  351. curhandle=$+1
  352.         ld b,0
  353.         OS_READHANDLE
  354.         ret
  355.  
  356. ;hl = poi to filename in string
  357. ;out: de = after last dot or start
  358. findlastdot
  359.         ld d,h
  360.         ld e,l ;de = after last dot
  361. findlastdot0
  362.         ld a,[hl]
  363.         inc hl
  364.         or a
  365.         ret z
  366.         cp '.'
  367.         jr nz,findlastdot0
  368.         jr findlastdot
  369.  
  370.  
  371. teststr
  372. testdata0
  373.         ld a,(de)
  374.         or 0x20
  375.         cp (hl)
  376.         ret nz ;jr nz,cmd_proc_skip
  377.         inc de
  378.         cpi
  379.         jp pe,testdata0
  380.         xor a
  381.         ret
  382.  
  383. ;hl = poi to filename in string
  384. ;out: de = after last slash
  385. findlastslash.
  386. nfopenfnslash.
  387.         ld d,h
  388.         ld e,l ;de = after last slash
  389. nfopenfnslash0.
  390.         ld a,[hl]
  391.         inc hl
  392.         or a
  393.         ret z
  394.        cp ' '
  395.        ret z
  396.         cp '/'
  397.         jr nz,nfopenfnslash0.
  398.         jr nfopenfnslash.
  399.  
  400. ttestdatacom
  401.         db "player.com"
  402. ttestdatacom_sz=$-ttestdatacom
  403.  
  404. ttestdata
  405.         db "player "
  406. ttestdata_sz=$-ttestdata
  407.  
  408. skipword
  409. ;hl=string
  410. ;out: hl=terminator/space addr
  411. getword0
  412.         ld a,(hl)
  413.         or a
  414.         ret z
  415.         cp ' '
  416.         ret z
  417.         inc hl
  418.         jr getword0
  419.  
  420. skipspaces
  421. ;hl=string
  422. ;out: hl=after last space
  423.         ld a,(hl)
  424.         cp ' '
  425.         ret nz
  426.         inc hl
  427.         jr skipspaces
  428.  
  429. prtext
  430. ;out: hl=after terminator
  431. prtext0
  432.         ld a,(hl)
  433.         inc hl
  434.         or a
  435.         ret z
  436.         push hl
  437.         PRCHAR
  438.         pop hl
  439.         jp prtext0
  440.  
  441. findts
  442. ;ix = file size
  443. ;out: zf = 1 if TS data is found, hl = offset to the second module if available
  444.         ld de,MDLADDR
  445.         add ix,de ;past-the-end address of the data buffer
  446.  
  447.         ld a,'0'
  448.         cp (ix-4)
  449.         ret nz
  450.         ld a,'2'
  451.         cp (ix-3)
  452.         ret nz
  453.         ld a,'T'
  454.         cp (ix-2)
  455.         ret nz
  456.         ld a,'S'
  457.         cp (ix-1)
  458.         ret nz
  459.  
  460.         ld hl,(ix-12)
  461.         ret
  462.  
  463. getptsconfig
  464. ;ix = file size
  465. ;out: a = player config bits, hl = offset to the second module if available
  466.         call findts
  467.         ld a,%00010001 ;2xPT3
  468.         ret z
  469.  
  470.         ld a,(MDLADDR)
  471.         cp 'V'
  472.         jr z,$+4
  473.         cp 'P' ;'P'/'V' for PT3
  474.         ld a,%00100001 ;PT3
  475.         ret z
  476.         ld a,%00000011 ;PT2
  477.         ret
  478.  
  479. ;oldtimer
  480. ;        dw 0
  481.  
  482.         ;include "../_sdk/stdio.asm"
  483.  
  484.         ;ds 0x4000-$
  485. wasplayer
  486.         disp 0x4000
  487. player
  488. ;a = port bd77 value
  489.         di
  490.         push af
  491.         and 0xf7;0xa0;%10101000 ;320x200 mode noturbo
  492.         ld bc,0xbd77    ;shadow ports and palette remain on
  493.         out (c),a
  494.  
  495.         ld hl,end_player
  496.         push hl
  497.        
  498.         ld a,(MDLADDR + 0x0a)
  499.         cp 'E'
  500.         jp z,EPlayer_Play
  501.         ld a,(MDLADDR)
  502.         cp 'T'
  503.         jp z,tfm
  504.        
  505.         jp nz,PLAY
  506.        
  507. end_player
  508.         pop af
  509.         ;LD A,0xa8;%10101000 ;320x200 mode
  510.         ld bc,0xbd77    ;shadow ports and palette remain on
  511.         out (c),a
  512.         ei
  513.         ret
  514. muter        
  515.         ld a,(MDLADDR)
  516.         cp 'T'
  517.         push af
  518.         call nz,MUTE
  519.         pop af
  520.         call z,tfmshut
  521.         ret
  522.        
  523.         include "../_sdk/ptsplay.asm"
  524.         include "tfmplay.asm"
  525.         include "tfdtest.asm"
  526.         include "tfmtest.asm"
  527.         include "etplayer.asm"
  528. ;tfmData
  529.         ent
  530. szplayer=$-wasplayer
  531.  
  532. cmd_end
  533.  
  534.         display "szplayer ",/d,szplayer," bytes"
  535.         display "Size ",/d,cmd_end-cmd_begin," bytes"
  536.  
  537.         savebin "player.com",cmd_begin,cmd_end-cmd_begin
  538.        
  539.         LABELSLIST "../../us/user.l",1
  540.