Advertisement
tepples

memcpy in Intel 8008 and 8080

Mar 13th, 2021
3,706
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. section "vars", WRAM0, align[1]
  2. src: ds 2
  3. dst: ds 2
  4. cnt: ds 2
  5.  
  6. section "code", ROM0
  7. ; After https://en.wikipedia.org/wiki/Intel_8008#Example_code
  8. memcpy_8008:
  9.   ld l, low(cnt)  ; ld bc, [cnt]
  10.   ld h, high(cnt) ; (Pino) Bug fixed
  11.   ld c, [hl]
  12.   inc l
  13.   ld b, [hl]
  14.   .loop:
  15.     ld a, c       ; Return if BC is 0
  16.     or b
  17.     ret z
  18.     ld a, c       ; dec bc
  19.     sub 1
  20.     ld c, a
  21.     ld a, b
  22.     sbc 0
  23.     ld b, a
  24.     ld l, low(src)   ; ld de, [src]
  25.     ld h, high(src)  ; (Pino) Bug fixed
  26.     ld e, [hl]
  27.     inc l
  28.     ld d, [hl]
  29.     ld a, c          ; ld hl, de+bc
  30.     add e
  31.     ld l, a
  32.     ld a, b
  33.     adc d
  34.     ld h, a
  35.     ld a, [hl]       ; Read the byte
  36.     ld l, low(dst)   ; ld hl, [dst]
  37.     ld h, high(dst)  ; (Pino) Bug fixed
  38.     ld e, [hl]
  39.     inc l
  40.     ld d, [hl]
  41.     ld l, e
  42.     ld h, d
  43.     ld d, a          ; save the read byte
  44.     ld a, c          ; add hl, bc
  45.     add l
  46.     ld l, a
  47.     ld a, b
  48.     adc h
  49.     ld h, a
  50.     ld [hl], d       ; write the byte
  51.     jp .loop
  52.  
  53. memcpy_8080:
  54.   ld hl, [cnt]
  55.   ld b, h
  56.   ld c, l
  57.   ld hl, [dst]
  58.   ex de, hl
  59.   ld hl, [src]
  60.   .loop:
  61.     ld a, c
  62.     or b
  63.     ret z
  64.     ld a, [hl]
  65.     inc hl
  66.     ld [de], a
  67.     inc de
  68.     dec bc
  69.     jp .loop
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement