?login_element?

Subversion Repositories NedoOS

Rev

Rev 1411 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.         DEVICE ZXSPECTRUM128
  2.         include "../_sdk/sys_h.asm"
  3.  
  4. MAXCMDSZ=COMMANDLINE_sz-1;127 ;не считая терминатора
  5.  
  6.         org PROGSTART
  7. cmd_begin
  8.         ld sp,0x4000 ;не должен опускаться ниже 0x3b00! иначе возможна порча OS
  9.         OS_HIDEFROMPARENT
  10.  
  11.         OS_GETMAINPAGES
  12. ;dehl=номера страниц в 0000,4000,8000,c000
  13.         push hl
  14.         OS_DELPAGE
  15.         pop hl
  16.         push hl
  17.         ld e,h
  18.         OS_DELPAGE
  19.         pop hl
  20.         ld e,l
  21.         OS_DELPAGE
  22.  
  23.         ld hl,COMMANDLINE ;command line
  24. ;command line = "print <file>"
  25.         ld de,wordbuf
  26.         call getword
  27.         call skipspaces
  28.         ld de,wordbuf
  29.         push de
  30.         call getword
  31.         pop de
  32.         OS_OPENHANDLE
  33.         or a
  34.         jr nz,errorquit
  35.         push bc
  36.         ld a,b
  37.         ld (filehandle),a
  38.          ld a,0x3c ;"inc a"
  39.          ld (readbyte_readbuf_last),a
  40.         ld iy,file_buf_end
  41.         call readandprint
  42.         pop bc
  43.         OS_CLOSEHANDLE
  44.        ld hl,0
  45.         QUIT
  46. errorquit
  47.        ld l,a
  48.        ld h,0
  49.         QUIT
  50.  
  51. getword
  52. ;hl=string
  53. ;de=wordbuf
  54. ;out: hl=terminator/space addr
  55. getword0
  56.         ld a,(hl)
  57.         or a
  58.         jr z,getwordq
  59.         sub ' '
  60.         jr z,getwordq
  61.         ldi
  62.         jp getword0
  63. getwordq
  64.         ;xor a
  65.         ld (de),a
  66.         ret
  67.  
  68. skipspaces
  69. ;hl=string
  70. ;out: hl=after last space
  71.         ld a,(hl)
  72.         cp ' '
  73.         ret nz
  74.         inc hl
  75.         jr skipspaces
  76.  
  77.         macro READBYTE_A
  78. ;out: z=EOF
  79.         inc ly
  80.         call m,readbyte_readbuf
  81.         ld a,(iy)
  82.         endm
  83.  
  84. readandprint
  85.         call LPINIT
  86. readandprint0
  87.         READBYTE_A ;z=EOF
  88.         jr z,readandprintEOF
  89.         call LPRINT
  90.         jr nc,readandprint0
  91. ;error (break)
  92. readandprintEOF
  93. ;EOF
  94.         ret
  95.  
  96. readbyte_readbuf
  97. ;out: z=EOF
  98.         push bc
  99.         push de
  100.         push hl
  101.         push ix
  102.         xor a
  103. readbyte_readbuf_last=$
  104.         inc a ;/nop(z)=last, inc a(nz)=not last
  105.         jr z,readbyte_readbufq
  106.  
  107. ;B = file handle, DE = Buffer address, HL = Number of bytes to read
  108. filehandle=$+1
  109.         ld b,0
  110.         ld de,file_buf
  111.         push de
  112.         ld hl,128
  113.         OS_READHANDLE
  114.         pop iy
  115. ;HL = Number of bytes actually read, A=error
  116.         ld a,l
  117.         or a
  118.         jr z,readbyte_readbufq ;0 bytes (=>EOF)
  119.         jp m,readbyte_readbufq ;128 bytes (NZ no EOF) (not last block)
  120.        
  121. ;last block: shift data to the end of buf, mark last
  122.         ld c,a ;1..128
  123.         ld b,0 ;nz!
  124.         ld a,b
  125.         ld (readbyte_readbuf_last),a ;last block
  126.         ld hl,file_buf
  127.         add hl,bc
  128.         dec hl ;end of data
  129.         ld de,file_buf+127
  130.         lddr
  131.         inc de
  132.         push de
  133.         pop iy
  134.         ;nz!
  135. readbyte_readbufq
  136. ;iy=addr
  137. ;z=EOF
  138.         pop ix
  139.         pop hl
  140.         pop de
  141.         pop bc
  142.         ret
  143.  
  144. ;------------------------------------ driver for ZX Evo by DDp
  145. LPRINT
  146. ;a=char
  147. ;out: CY=error
  148.         push af
  149.         ld bc,0xfffd
  150.         ld a,14
  151.         out (c),a
  152.         ld b,0xbf
  153.         pop af
  154.         out (c),a
  155.         ld b,0xff
  156.         ld a,15
  157.         out (c),a
  158. LPRIN1
  159.         ld a,0xfe
  160.         in a,(0xfe)
  161.         rra
  162.         jr c,LPRINT_nobreak
  163.         ld a,0x7f
  164.         in a,(0xfe)
  165.         rra
  166.         jr nc,LPRIN2 ;break (system keyboard is not available for background programs; anyway, user can "kill" the print process)
  167. LPRINT_nobreak
  168.         in a,(c)
  169.         rla
  170.         jr nc,LPRIN1 ;wait for printer READY
  171.        
  172.         ld a,7
  173.         out (c),a
  174.         ld b,0xbf
  175.         ld a,0xff
  176.         out (c),a
  177.         push ix
  178.         pop ix
  179.         push ix
  180.         pop ix ;pause
  181.         ld a,0x7f
  182.         out (c),a
  183.         xor a
  184.         ret
  185. LPRIN2
  186.         scf
  187.         ret
  188.  
  189. LPINIT
  190.         ld bc,0xfffd
  191.         ld a,7
  192.         out (c),a
  193.         ld b,0xbf
  194.         ld a,0x7f
  195.         out (c),a
  196.         ld b,0xff
  197.         ld a,15
  198.         out (c),a
  199.         ld b,0xbf
  200.         xor a
  201.         out (c),a
  202.         ld hl,STRINIT
  203. LPINI1
  204.         ld a,(hl)
  205.         cp 0xff
  206.         ret z
  207.         call LPRINT
  208.         inc hl
  209.         jr LPINI1
  210. STRINIT
  211.         db 0x1b,"@",0xff
  212.  
  213. cmd_end
  214.  
  215. wordbuf
  216.         ds MAXCMDSZ+1
  217.  
  218.         align 256
  219. file_buf
  220.         ds 128 ;buf for reading .bat
  221. file_buf_end=$-1
  222.  
  223.  
  224.         savebin "print.com",cmd_begin,cmd_end-cmd_begin
  225.        
  226.         LABELSLIST "..\..\us\user.l",1
  227.