Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
29
Task/Bitwise-IO/Z80-Assembly/bitwise-io-1.z80
Normal file
29
Task/Bitwise-IO/Z80-Assembly/bitwise-io-1.z80
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
StoreBinaryString:
|
||||
;INPUT:
|
||||
; HL = SOURCE ADDRESS
|
||||
; DE = OUTPUT STRING RAM
|
||||
; BC = HOW MANY BYTES OF SOURCE DATA TO CONVERT
|
||||
ld a,(hl)
|
||||
push bc
|
||||
ld b,a ;backup a for later
|
||||
ld c,%10000000 ;a "revolving bit mask" is used to compare
|
||||
; each bit of A, in sequence.
|
||||
loop:
|
||||
ld a,b ;restore A
|
||||
and c
|
||||
ld a,'0' ;get ascii 0 into A. This does not affect the flags!
|
||||
jr z,skip ;this jump is based on the result of B AND C
|
||||
inc a ;convert ascii 0 into ascii 1, only if B AND C was nonzero.
|
||||
skip:
|
||||
LD (DE),A ;store in output string
|
||||
inc de ;next byte of output string
|
||||
rrc c ;shift the bit mask down to the next bit of A
|
||||
jr nc,loop ;once a 1 is shifted into the carry, we're finished. Otherwise, check next bit.
|
||||
|
||||
pop bc
|
||||
inc hl
|
||||
dec bc
|
||||
ld a,b
|
||||
or c
|
||||
jp nz,StoreBinaryString
|
||||
ret
|
||||
41
Task/Bitwise-IO/Z80-Assembly/bitwise-io-2.z80
Normal file
41
Task/Bitwise-IO/Z80-Assembly/bitwise-io-2.z80
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
CompressBinaryStrings_7bit:
|
||||
; HL = pointer to output
|
||||
; DE = pointer to input. Input is assumed to equal &30 or &31
|
||||
; Usage:
|
||||
; LD hl,OutputRam
|
||||
; LD de,InputRam
|
||||
; CALL CompressBinaryStrings_7bit
|
||||
|
||||
; If the string "runs out" before the 8 bit boundary, the rest are rotated into place.
|
||||
; e.g. input = "0101" then the procedure will RLC until those bits
|
||||
; are as far left as possible.
|
||||
|
||||
outerloop:
|
||||
inc de ;skip bit 7
|
||||
ld b,7 ;loop counter
|
||||
innerloop:
|
||||
ld a,(de)
|
||||
or a ;compares accumulator to zero. Assumes a null-terminated string.
|
||||
; Otherwise compare A to your terminator of choice.
|
||||
|
||||
jr z,HandleEarlyExit
|
||||
;input is assumed to be &30 or &31, so the least significant bit tells us
|
||||
; all we need to know. The rest of the byte can be discarded.
|
||||
|
||||
rra ;rotate the result into the carry
|
||||
rl (hl) ;rotate it out of the carry into (HL)
|
||||
inc de
|
||||
z_djnz innerloop
|
||||
;a macro that becomes DJNZ <label> on Zilog Z80 and DEC B JR NZ,<label> on Sharp LR35902
|
||||
|
||||
inc hl ;next output byte
|
||||
jp outerloop
|
||||
|
||||
HandleEarlyExit:
|
||||
xor a ;LD A,0
|
||||
cp b ;compare B to zero
|
||||
ret z ;if B=0, we're done. No need to adjust the last byte
|
||||
loop_earlyExit
|
||||
rlc (hl)
|
||||
z_djnz loop_earlyExit
|
||||
ret
|
||||
Loading…
Add table
Add a link
Reference in a new issue