?login_element?

Subversion Repositories NedoOS

Rev

Rev 1772 | Rev 1787 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.         DEVICE ZXSPECTRUM128
  2.         include "../_sdk/sys_h.asm"
  3.  
  4. STACK=0x4000
  5. TCRC=0x6800 ;size 0x400, divisible by 0x400
  6. DISKBUF=0xc000
  7. DISKBUFsz=0x4000
  8.  
  9.         org PROGSTART
  10. cmd_begin
  11.         ld sp,STACK
  12.         call initstdio
  13.  
  14.         xor a
  15.         LD L,A
  16. MKTCRC0 EXX
  17.         LD HL,0
  18.         ld D,H
  19.         ld E,A
  20.         LD B,8
  21. MKTCRC1 SRL H
  22.         RR L
  23.         rr D
  24.         rr E
  25.         JR NC,MKTCRCe
  26.         ex af,af' ;'
  27.         LD A,E
  28.         XOR 0x20
  29.         LD E,A
  30.         ld A,D
  31.         XOR 0x83
  32.         LD D,A
  33.         ld A,L
  34.         XOR 0xB8
  35.         LD L,A
  36.         ld A,H
  37.         XOR 0xED
  38.         LD H,A
  39.         ex af,af' ;'
  40. MKTCRCe DJNZ MKTCRC1
  41.         PUSH HL
  42.         PUSH DE
  43.         EXX
  44.        LD H,TCRC/256
  45.         POP DE
  46.         LD (HL),E
  47.         INC H
  48.         LD (HL),D
  49.         INC H
  50.         POP DE
  51.         LD (HL),E
  52.         INC H
  53.         LD (HL),D
  54.         INC L
  55.         INC A
  56.         JR NZ,MKTCRC0
  57.        
  58.         ld hl,COMMANDLINE
  59.         call skipword
  60.         call skipspaces
  61.         ld a,(hl)
  62.         or a
  63.         jr z,openerror
  64.         ;jr nz,$+5
  65.         ; ld hl,defaultfilename
  66.         ld (curfilenameaddr),hl
  67.         ex de,hl
  68.         call openstream_file
  69.         or      a
  70.         jr      nz,openerror
  71. readloop0
  72.         ld de,DISKBUF
  73.         ld hl,DISKBUFsz
  74. ;de=buf
  75. ;hl=size
  76.         call readstream_file
  77.         ld a,h
  78.         or l
  79.         jr z,closequit
  80.         ld b,h
  81.         ld c,l
  82.        
  83.         ;BC -- size
  84.         ld      hl,DISKBUF
  85.         exx
  86.         LD      DE,(CRCArea+2)
  87.         LD      BC,(CRCArea)
  88.         exx
  89.         call    crc_loop
  90.         exx
  91.         LD      (CRCArea),BC
  92.         LD      (CRCArea+2),DE
  93.  
  94.         jr readloop0
  95. closequit
  96.         call closestream_file
  97. curfilenameaddr equ $+1
  98.         ld hl,txtcrc
  99.         call prtext
  100.         ld      hl,txtdblspc
  101.         call    prtext
  102.         ld hl,CRCArea
  103.         ld a,(hl)
  104.         cpl
  105.         ld (hl),a
  106.         inc hl
  107.         ld a,(hl)
  108.         cpl
  109.         ld (hl),a
  110.         inc hl
  111.         ld a,(hl)
  112.         cpl
  113.         ld (hl),a
  114.         inc hl
  115.         ld a,(hl)
  116.         cpl
  117.         ld (hl),a
  118.         call prhexbyte
  119.         call prhexbyte
  120.         call prhexbyte
  121.         call prhexbyte        
  122.         ld hl,txtcrlf
  123.         call prtext
  124.        
  125. openerror
  126. error
  127. quit
  128.         QUIT
  129.  
  130. skipword
  131. ;hl=string
  132. ;out: hl=terminator/space addr
  133. getword0
  134.         ld a,(hl)
  135.         or a
  136.         ret z
  137.         cp ' '
  138.         ret z
  139.         inc hl
  140.         jr getword0
  141.  
  142. skipspaces
  143. ;hl=string
  144. ;out: hl=after last space
  145.         ld a,(hl)
  146.         cp ' '
  147.         ret nz
  148.         inc hl
  149.         jr skipspaces
  150.  
  151. prhexbyte
  152.         ld a,(hl)
  153.         rrca
  154.         rrca
  155.         rrca
  156.         rrca
  157.         call prhexdigit
  158.         ld a,(hl)
  159.         dec hl
  160. prhexdigit
  161.         or 0xf0
  162.         daa
  163.         add a,0xa0
  164.         adc a,0x40
  165.         push hl
  166.         PRCHAR_
  167.         pop hl
  168.         ret
  169.  
  170. prtext
  171.         ld a,(hl)
  172.         or a
  173.         ret z
  174.         push hl
  175.         push iy
  176.         PRCHAR_
  177.         pop iy
  178.         pop hl
  179.         inc hl
  180.         jr prtext
  181.        
  182. txtdblspc
  183.         db      "  ",0
  184. txtcrc
  185.         db "CRC32=",0
  186. txtcrlf
  187.         db 13,10,0
  188.  
  189.  
  190.  
  191.  
  192.  
  193.         ;bc - size
  194.         ;hl - ptr
  195.         ;c'b'e'd' - crc
  196. crc_loop
  197.         ld      a,[hl]          ;7
  198.         exx                     ;4
  199.  
  200.         xor     c               ;4
  201.         ld      l,a             ;4
  202.  
  203.         ld      h,TCRC/256      ;7
  204.         ld      a,[hl]          ;7
  205.         xor     b               ;4
  206.         ld      c,a             ;4
  207.  
  208.         inc     h               ;4
  209.         ld      a,[hl]          ;7
  210.         xor     e               ;4
  211.         ld      b,a             ;4
  212.  
  213.         inc     h               ;4
  214.         ld      a,[hl]          ;7
  215.         xor     d               ;4
  216.         ld      e,a             ;4
  217.  
  218.         inc     h               ;4
  219.         ld      d,[hl]          ;7
  220.  
  221.         exx                     ;4
  222.         cpi                     ;16
  223.         jp      pe,crc_loop     ;10
  224.                                 ; == 120 tc/byte
  225.         ret     ;10
  226.  
  227.  
  228.  
  229.  
  230.         include "../_sdk/file.asm"
  231.         include "../_sdk/stdio.asm"
  232.  
  233. CRCArea
  234.         ds 4,0xff
  235.  
  236. cmd_end
  237.  
  238.         display "Size ",/d,cmd_end-cmd_begin," bytes"
  239.  
  240.         savebin "crc.com",cmd_begin,cmd_end-cmd_begin
  241.        
  242.         LABELSLIST "../../us/user.l"
  243.