?login_element?

Subversion Repositories NedoOS

Rev

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

  1.         DEVICE ZXSPECTRUM128
  2.         include "../_sdk/sys_h.asm"
  3.  
  4. MAXCMDSZ=COMMANDLINE_sz-1;127 ;не считая терминатора
  5. filebuf=0xc000
  6. filebufsz=0x4000;512
  7. TRDSIZE=655360
  8.  
  9.         org PROGSTART
  10. cmd_begin
  11.         ld sp,0x4000 ;не должен опускаться ниже 0x3b00! иначе возможна порча OS
  12.         ;OS_HIDEFROMPARENT
  13.  
  14.          ld a,0 ;EGA
  15.          OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+128=keep gfx ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  16.          ld e,0
  17.          OS_CLS
  18.  
  19.         if 1
  20.         OS_GETMAINPAGES
  21. ;dehl=номера страниц в 0000,4000,8000,c000
  22.         push hl
  23.         OS_DELPAGE
  24.         pop hl
  25.         push hl
  26.         ld e,h
  27.         OS_DELPAGE
  28.         pop hl
  29.         ld e,l
  30.         OS_DELPAGE
  31.         endif
  32.  
  33.         ld hl,tpgs
  34.         ld b,TRDSIZE/0x4000
  35. getpgs
  36.         push bc
  37.         push hl
  38.         OS_NEWPAGE
  39.         pop hl
  40.         ld (hl),e
  41.         inc hl
  42.         pop bc
  43.         djnz getpgs
  44.  
  45.         ld hl,COMMANDLINE ;command line
  46. ;command line = "print <file>"
  47.         ld de,wordbuf
  48.         call skipword
  49.         ld a,(hl)
  50.         or a
  51.         jr z,nofilename
  52.         call skipspaces
  53.         ld de,wordbuf
  54.         call getword
  55. nofilename
  56.         ld de,wordbuf
  57.         OS_CREATEHANDLE
  58.         or a
  59.         jp nz,errorquit
  60.         push bc
  61.         ld a,b
  62.         ld (filehandle),a
  63.  
  64.         ;call dosoff
  65.  
  66. ;Пример настройки контроллера на скорость обмена 9600 бод из режима BASIC-48:
  67. ;10 LET register = 3: LET value = 128: GO SUB 1000
  68. ;20 LET register = 0: LET value = 12: GO SUB 1000
  69. ;30 LET register = 1: LET value =0: GO SUB 1000
  70. ;40 LET register = 3: LET value = 3: GOSUB 1000
  71.         ld bc,#fbef ;RS232_LINE_CTRL
  72.         in a,(c)
  73.         or 128
  74.         out (c),a
  75.         ld bc,#f8ef ;RS232_DIV_L
  76.         ld a,2;12 ;115200/2 (иначе не успеет)
  77.         out (c),a
  78.         ld bc,#f9ef ;RS232_DIV_H
  79.         ld a,0 ;+128 native ZXEvo mode
  80.         out (c),a
  81.         ld bc,#fbef ;RS232_LINE_CTRL
  82.         ld a,3
  83.         out (c),a
  84.         ld bc,0xFAEF;UART_FCR   ;сбрасываем буферы
  85.         ld a,7
  86.         out (c),a
  87.  
  88.         ;call doson
  89.  
  90.         di
  91.         ld hl,TRDSIZE&0xffff
  92.         ld de,TRDSIZE/65536
  93. readloop0
  94. ;dehl=remaining size
  95.         ld bc,filebufsz
  96.        push de ;remaining size HSW
  97.        push hl ;remaining size
  98.         ld a,d
  99.         or e
  100.         jr nz,readloop_fullsize
  101.         sbc hl,bc
  102.         add hl,bc
  103.         jr c,readloop_tailsize ;dehl < bc
  104. readloop_fullsize
  105.         ld h,b
  106.         ld l,c
  107. readloop_tailsize
  108.        push hl ;size to read
  109.         call readtomem;file
  110.        pop bc ;size to read
  111.        pop hl ;remaining size
  112.        pop de ;remaining size HSW
  113.         or a
  114.         sbc hl,bc
  115.         jr nc,$+3
  116.         dec de
  117.         ld a,d
  118.         or e
  119.         or h
  120.         or l
  121.         jr nz,readloop0
  122.         ei
  123.  
  124.         ld hl,TRDSIZE&0xffff
  125.         ld de,TRDSIZE/65536
  126. saveloop0
  127. ;dehl=remaining size
  128.         ld bc,filebufsz
  129.        push de ;remaining size HSW
  130.        push hl ;remaining size
  131.         ld a,d
  132.         or e
  133.         jr nz,saveloop_fullsize
  134.         sbc hl,bc
  135.         add hl,bc
  136.         jr c,saveloop_tailsize ;dehl < bc
  137. saveloop_fullsize
  138.         ld h,b
  139.         ld l,c
  140. saveloop_tailsize
  141.        push hl ;size to read
  142.         call savetofile
  143.        pop bc ;size to read
  144.        pop hl ;remaining size
  145.        pop de ;remaining size HSW
  146.         or a
  147.         sbc hl,bc
  148.         jr nc,$+3
  149.         dec de
  150.         ld a,d
  151.         or e
  152.         or h
  153.         or l
  154.         jr nz,saveloop0
  155.        
  156.         pop bc
  157.         OS_CLOSEHANDLE
  158.        ld hl,0
  159.         QUIT
  160. errorquit
  161.        ld l,a
  162.        ld h,0
  163.         QUIT
  164.  
  165. readtomem;file
  166. ;hl=size
  167.         push hl
  168.         ;call dosoff
  169.        
  170. readtomem_tpgspointer=$+1
  171.         ld hl,tpgs
  172.         ld a,(hl)
  173.         SETPGC000
  174.         inc hl
  175.         ld (readtomem_tpgspointer),hl
  176.        
  177.         pop hl
  178.  
  179.         ld de,filebuf
  180.        
  181.        push hl
  182. readtofile0        
  183.         ;push de
  184.         ;push hl
  185.         ;YIELDGETKEYLOOP
  186.         ld bc,#fdef ;состояние приёмопередатчика
  187. readbyte0
  188.         in a,(c) ;Устанавливается в "1" при успешном приеме данных
  189.         and 1
  190.         jr z,readbyte0
  191.         ld bc,#f8ef ;регистр данных
  192.         in a,(c)
  193.  
  194.         ;pop hl
  195.         ;pop de
  196.         ld (de),a
  197.         inc de
  198.         dec hl
  199.         ld a,h
  200.         or l
  201.         jp nz,readtofile0
  202.  
  203.         ;call doson
  204.  
  205.        pop hl ;size
  206.         ret
  207.  
  208. savetofile
  209.        push hl ;size
  210. savetofile_tpgspointer=$+1
  211.         ld hl,tpgs
  212.         ld a,(hl)
  213.         SETPGC000
  214.         inc hl
  215.         ld (savetofile_tpgspointer),hl
  216.        pop hl ;size
  217.        
  218.         ld de,filebuf
  219. filehandle=$+1
  220.         ld b,0
  221.         OS_WRITEHANDLE
  222.         ret
  223.        
  224. dosoff
  225.         ;ld a,0xa8 ;turbo
  226.         ;ld bc,0xff77
  227.         ;out (c),a
  228.         ret
  229. doson
  230.         ;ld a,1+32
  231.         ;out (0xbf),a
  232.         ;ld a,0xa8 ;turbo
  233.         ;ld bc,0xbd77
  234.         ;out (c),a
  235.         ;ld a,0+32 ;ATM3 pal
  236.         ;out (0xbf),a
  237.         ret
  238.        
  239. getword
  240. ;hl=string
  241. ;de=wordbuf
  242. ;out: hl=terminator/space addr
  243. getword0
  244.         ld a,(hl)
  245.         or a
  246.         jr z,getwordq
  247.         sub ' '
  248.         jr z,getwordq
  249.         ldi
  250.         jp getword0
  251. getwordq
  252.         ;xor a
  253.         ld (de),a
  254.         ret
  255.  
  256. skipword
  257. ;hl=string
  258. ;out: hl=terminator/space addr
  259. skipword0
  260.         ld a,(hl)
  261.         or a
  262.         ret z
  263.         sub ' '
  264.         ret z
  265.         inc hl
  266.         jp skipword0
  267.  
  268. skipspaces
  269. ;hl=string
  270. ;out: hl=after last space
  271.         ld a,(hl)
  272.         cp ' '
  273.         ret nz
  274.         inc hl
  275.         jr skipspaces
  276.  
  277. wordbuf
  278.         db "file.trd"
  279.         ds MAXCMDSZ+1 -8
  280.  
  281. cmd_end
  282.  
  283.         align 256
  284. tpgs
  285.         ds 64
  286.  
  287. ;filebuf
  288. ;        ds filebufsz
  289.  
  290.  
  291.  
  292.         savebin "gettrd.com",cmd_begin,cmd_end-cmd_begin
  293.        
  294.         LABELSLIST "..\..\us\user.l",1
  295.