?login_element?

Subversion Repositories NedoOS

Rev

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

  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,6 ;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.       cp key_redraw
  183.       jr z,mainloopredraw
  184.         ;or a ;cp NOKEY ;keylang==0?
  185.         ;jr nz,$+2+1+2
  186.         ;cp c ;keynolang==0?
  187.         ;jr z,_1;1b;prwindow_waitkey_nokey
  188.         cp key_esc
  189.         jr nz,mainloop
  190. quit
  191.           ld a,(musicpage)
  192.           ld hl,muter
  193.           OS_SETMUSIC
  194.           halt
  195. noautoload
  196.         QUIT
  197.  
  198. play_tfd
  199. ;b=handle
  200.         call loadtfd
  201.  
  202.         call tfd_ini
  203.         call tfmshut
  204.  
  205.         ld a,(musicpage)
  206.         ld hl,tfd_play
  207.         OS_SETMUSIC
  208.         jp mainloopredraw
  209.  
  210. play_tfm
  211. ;b=handle
  212.         call loadtfd
  213.  
  214.         ;call tfm_ini
  215.  
  216.         halt
  217.         ld a,(musicpage)
  218.         ld hl,tfm_play
  219.         OS_SETMUSIC ;пишет в AY
  220.  
  221.         call tfmshut
  222.  
  223.         ld a,0xa0;%10101000 ;320x200 mode noturbo
  224.         ld bc,0xbd77    ;shadow ports and palette remain on
  225.         out (c),a
  226.  
  227.         LD DE,#FFBF
  228.         LD C,#FD
  229.         CALL selChip0
  230.         CALL clrSSG;tfminiPP
  231.         LD A,%11111000
  232.         EXA
  233.         LD A,7
  234.         CALL WRITEREG
  235.         CALL selChip1
  236.         CALL clrSSG;tfminiPP
  237.         LD A,%11101111
  238.         EXA
  239.         LD A,7
  240.         call WRITEREG
  241.  
  242.         LD A,0xa8;%10101000 ;320x200 mode
  243.         ld bc,0xbd77    ;shadow ports and palette remain on
  244.         out (c),a
  245.  
  246.         jp mainloopredraw
  247.  
  248. clrSSG
  249.         XOR A
  250.         EXA
  251.         LD A,#0D ;SSG
  252. regClrS0 CALL WRITEREG
  253.         DEC A
  254.         JP P,regClrS0
  255.         ret
  256.  
  257. loadtfd
  258. ;b=handle
  259.         ld a,b
  260.         ld (curhandle),a
  261.        if 1
  262.         ld hl,0
  263.         ld de,0
  264. nvview_load0
  265.         push de
  266.         push hl
  267.         call reservepage
  268.         pop hl
  269.         pop de
  270.         ret nz ;no memory
  271. ;nvview_load0nonewpg        
  272.         ld a,0xc000/256
  273.         call cmd_loadpage
  274.         jr nz,nvview_load0q
  275.         ex de,hl
  276.         add hl,bc
  277.         ex de,hl
  278.         jr nc,$+3
  279.         inc hl
  280.          ;TODO nvview_load0nonewpg with new pointer if no new page
  281.         ld a,b
  282.         or c
  283.         jr nz,nvview_load0
  284. nvview_load0q
  285. ;hlde=true file size (for TRDOSFS)
  286.         ;ld (filesize),de
  287.         ;ld (filesizeHSW),hl
  288.  
  289.         ld a,(curhandle)
  290.         ld b,a
  291.         OS_CLOSEHANDLE
  292.        else
  293.         ld de,tfmData
  294.         ld hl,0xffff&(-tfmData);0x4000
  295. ;B = file handle, DE = Buffer address, HL = Number of bytes to read
  296.         push bc
  297.         OS_READHANDLE
  298.         pop bc
  299.  
  300. ;B = file handle
  301.         OS_CLOSEHANDLE
  302.        endif
  303.         ret
  304.  
  305. reservepage
  306. ;new page, set page in textpages, npages++, set page in #c000
  307. ;nz=error
  308.         OS_NEWPAGE
  309.         or a
  310.         ret nz
  311. npages=$+1
  312.         ld hl,tpgs;textpages
  313.         ld (hl),e
  314.         inc l
  315.         ld (npages),hl
  316.         ld a,e
  317.         SETPGC000
  318.         xor a
  319.         ret ;z
  320.  
  321. cmd_loadpage
  322. ;out: a=error, bc=bytes read
  323. ;keeps hl,de
  324.         push de
  325.         push hl
  326.         ld d,a
  327.         xor a
  328.         ld l,a
  329.         ld e,a
  330.         sub d
  331.         ld h,a ;de=buffer, hl=size
  332.         call readcurhandle
  333.         ld b,h
  334.         ld c,l
  335.         pop hl
  336.         pop de
  337.         or a
  338.         ret
  339.  
  340. readcurhandle
  341. curhandle=$+1
  342.         ld b,0
  343.         OS_READHANDLE
  344.         ret
  345.  
  346. ;hl = poi to filename in string
  347. ;out: de = after last dot or start
  348. findlastdot
  349.         ld d,h
  350.         ld e,l ;de = after last dot
  351. findlastdot0
  352.         ld a,[hl]
  353.         inc hl
  354.         or a
  355.         ret z
  356.         cp '.'
  357.         jr nz,findlastdot0
  358.         jr findlastdot
  359.  
  360.  
  361. teststr
  362. testdata0
  363.         ld a,(de)
  364.         or 0x20
  365.         cp (hl)
  366.         ret nz ;jr nz,cmd_proc_skip
  367.         inc de
  368.         cpi
  369.         jp pe,testdata0
  370.         xor a
  371.         ret
  372.  
  373. ;hl = poi to filename in string
  374. ;out: de = after last slash
  375. findlastslash.
  376. nfopenfnslash.
  377.         ld d,h
  378.         ld e,l ;de = after last slash
  379. nfopenfnslash0.
  380.         ld a,[hl]
  381.         inc hl
  382.         or a
  383.         ret z
  384.        cp ' '
  385.        ret z
  386.         cp '/'
  387.         jr nz,nfopenfnslash0.
  388.         jr nfopenfnslash.
  389.  
  390. ttestdatacom
  391.         db "player.com"
  392. ttestdatacom_sz=$-ttestdatacom
  393.  
  394. ttestdata
  395.         db "player "
  396. ttestdata_sz=$-ttestdata
  397.  
  398. skipword
  399. ;hl=string
  400. ;out: hl=terminator/space addr
  401. getword0
  402.         ld a,(hl)
  403.         or a
  404.         ret z
  405.         cp ' '
  406.         ret z
  407.         inc hl
  408.         jr getword0
  409.  
  410. skipspaces
  411. ;hl=string
  412. ;out: hl=after last space
  413.         ld a,(hl)
  414.         cp ' '
  415.         ret nz
  416.         inc hl
  417.         jr skipspaces
  418.  
  419. prtext
  420. ;out: hl=after terminator
  421. prtext0
  422.         ld a,(hl)
  423.         inc hl
  424.         or a
  425.         ret z
  426.         push hl
  427.         PRCHAR
  428.         pop hl
  429.         jp prtext0
  430.  
  431. findts
  432. ;ix = file size
  433. ;out: zf = 1 if TS data is found, hl = offset to the second module if available
  434.         ld de,MDLADDR
  435.         add ix,de ;past-the-end address of the data buffer
  436.  
  437.         ld a,'0'
  438.         cp (ix-4)
  439.         ret nz
  440.         ld a,'2'
  441.         cp (ix-3)
  442.         ret nz
  443.         ld a,'T'
  444.         cp (ix-2)
  445.         ret nz
  446.         ld a,'S'
  447.         cp (ix-1)
  448.         ret nz
  449.  
  450.         ld hl,(ix-12)
  451.         ret
  452.  
  453. getptsconfig
  454. ;ix = file size
  455. ;out: a = player config bits, hl = offset to the second module if available
  456.         call findts
  457.         ld a,%00010000 ;2xPT3
  458.         ret z
  459.  
  460.         ld a,(MDLADDR)
  461.         cp 'V'
  462.         jr z,$+4
  463.         cp 'P' ;'P'/'V' for PT3
  464.         ld a,%00100000 ;PT3
  465.         ret z
  466.         ld a,%00000010 ;PT2
  467.         ret
  468.  
  469. ;oldtimer
  470. ;        dw 0
  471.  
  472.         ;include "../_sdk/stdio.asm"
  473.  
  474.         ;ds 0x4000-$
  475. wasplayer
  476.         disp 0x4000
  477. player
  478. ;a = port bd77 value
  479.         di
  480.         push af
  481.         and 0xf7;0xa0;%10101000 ;320x200 mode noturbo
  482.         ld bc,0xbd77    ;shadow ports and palette remain on
  483.         out (c),a
  484.  
  485.         ld hl,end_player
  486.         push hl
  487.        
  488.         ld a,(MDLADDR + 0x0a)
  489.         cp 'E'
  490.         jp z,EPlayer_Play
  491.         ld a,(MDLADDR)
  492.         cp 'T'
  493.         jp z,tfm
  494.        
  495.         jp nz,PLAY
  496.        
  497. end_player
  498.         pop af
  499.         ;LD A,0xa8;%10101000 ;320x200 mode
  500.         ld bc,0xbd77    ;shadow ports and palette remain on
  501.         out (c),a
  502.         ei
  503.         ret
  504. muter        
  505.         ld a,(MDLADDR)
  506.         cp 'T'
  507.         push af
  508.         call nz,MUTE
  509.         pop af
  510.         call z,tfmshut
  511.         ret
  512.  
  513.         include "../_sdk/ptsplay.asm"
  514.         include "tfmplay.asm"
  515.         include "tfdtest.asm"
  516.         include "tfmtest.asm"
  517.         include "etplayer.asm"
  518. ;tfmData
  519.         ent
  520. szplayer=$-wasplayer
  521.  
  522. cmd_end
  523.  
  524.         display "szplayer ",/d,szplayer," bytes"
  525.         display "Size ",/d,cmd_end-cmd_begin," bytes"
  526.  
  527.         savebin "player.com",cmd_begin,cmd_end-cmd_begin
  528.        
  529.         LABELSLIST "../../us/user.l",1
  530.