Last active
January 1, 2018 21:42
-
-
Save kishida/680543de2b606ee4240da41dd5bdfa6c to your computer and use it in GitHub Desktop.
Error Diffuse(Upper case)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
MUL3 MACRO | |
LD B, A | |
ADD A, A | |
ADD A, B | |
ENDM | |
MUL6 MACRO | |
ADD A, A | |
MUL3 | |
ENDM | |
MUL12 MACRO | |
ADD A, A | |
MUL6 | |
ENDM | |
MUL16 MACRO | |
ADD A, A | |
ADD A, A | |
ADD A, A | |
ADD A, A | |
ENDM | |
MUL32 MACRO | |
ADD A, A | |
MUL16 | |
ENDM | |
DIV16A MACRO | |
RRA | |
RRA | |
RRA | |
RRA | |
AND 15 | |
ENDM | |
DIV64A MACRO | |
RRA | |
RRA | |
RRA | |
RRA | |
RRA | |
RRA | |
AND 3 | |
ENDM | |
DIV3 MACRO | |
LD C, 0C0H | |
LD B, 7 | |
CALL DIV_JP | |
ENDM | |
DIV10 MACRO | |
LD C, 0A0H | |
LD B, 5 | |
CALL DIV_JP | |
ENDM | |
DIV12 MACRO | |
CALL DIV_12 | |
ENDM | |
CLIP7 MACRO | |
LOCAL CLIPEND | |
CP 8 | |
JP C, CLIPEND | |
LD A, 7 | |
CLIPEND: | |
ENDM | |
MODULO MACRO N | |
LOCAL MODEND | |
SUB N | |
JP NC, MODEND | |
ADD A, N | |
MODEND: | |
ENDM | |
RDVDP EQU 6H | |
WRVDP EQU 7H | |
BUFSIZ EQU 512 | |
ORG 0C000H-7 | |
; bsave header | |
DEFB 0FEH | |
DEFW 0C000H | |
DEFW VAR_Y | |
DEFW 0C000H | |
; clear diffnr, diffng | |
LD BC, BUFSIZ * 2 | |
LD HL, DIFFNR | |
LD D, 0 | |
INIT: | |
LD (HL), D | |
INC HL | |
DEC BC | |
LD A, B | |
OR C | |
JP NZ, INIT | |
XOR A | |
LD (VAR_Y), A | |
LOOPY: | |
; int cr = y % 2; | |
; int cw = 1 - cr; | |
LD A,(VAR_Y) | |
AND 1 | |
LD B, A | |
LD HL, DIFFNR | |
ADD A, H | |
LD H, A | |
PUSH HL | |
POP IX | |
SUB B | |
LD H, A | |
LD A, B | |
XOR 1 | |
ADD H | |
LD H, A | |
PUSH HL | |
POP IY | |
; int dr = yr[0][cr] + (y % 96); | |
; int b1 = y / 96 * 2; | |
LD B, 2 | |
LD A, (VAR_Y) | |
SUB 96 | |
JP NC, YMOD96_1 | |
ADD 96 | |
LD B, 0 | |
YMOD96_1: | |
LD HL, B1 | |
LD (HL), B | |
ADD A, (IX+0) | |
; int r = dr / 12; | |
; if (r > 7){ | |
; r = 7; | |
; } | |
; dr = dr - r * 12; | |
LD E, A | |
DIV12 | |
CLIP7 | |
ADD A, A | |
ADD A, A | |
LD H, A | |
MUL3 | |
SUB A, E | |
NEG | |
; int tr = dr * 6 / 16; yr[0][cw] = tr; | |
MUL6 | |
DIV16A | |
LD (IY+0), A | |
LD B, A | |
; t = dr / 16; yr[1][cw] = t; | |
LD A, C | |
DIV16A | |
LD (IY+1), A | |
; dr = dr - tr - t; | |
LD A, C | |
AND 0F0H | |
SUB B | |
EXX | |
LD D, A | |
EXX | |
; int dg = yg[0][cr]; | |
LD DE, BUFSIZ | |
ADD IX, DE | |
ADD IY, DE | |
LD C, (IX+0) | |
; int g = dg / 16; | |
LD A, C | |
DIV16A | |
; if (g > 7){ | |
; g = 7; | |
; } | |
CLIP7 | |
MUL32 | |
LD L, A | |
; dg = dg - g * 16; | |
RRA | |
SUB A, C | |
NEG | |
LD C, A | |
; int tg = dg * 6 / 16; yg[0][cw] = tg; | |
MUL6 | |
DIV16A | |
LD (IY+0), A | |
LD B, A | |
; t = dg / 16; yg[1][cw] = t; | |
LD A, C | |
DIV16A | |
LD (IY+1), A | |
LD D, A | |
; dg = dg - tg - t; | |
LD A, C | |
SUB A, B | |
SUB A, D | |
EXX | |
LD E, A | |
EXX | |
; c = color(r * 32 + g * 4 + b1) | |
LD A, (B1) | |
ADD A, H | |
ADD A, L | |
LD D, A | |
; img.setrgb(0, y, c); | |
LD A, (WRVDP) | |
LD C, A | |
INC C | |
LD A, (VAR_Y) | |
LD B, A | |
DIV64A | |
DI | |
OUT (C), A | |
LD A, 80H + 14 | |
OUT (C), A | |
XOR A | |
OUT (C), A | |
LD A, B | |
AND 3FH | |
OR 40H | |
OUT (C), A | |
DEC C | |
OUT (C), D | |
EI | |
LD DE, -BUFSIZ | |
ADD IX, DE | |
ADD IY, DE | |
EXX | |
LD B, 1 | |
EXX | |
LOOPX: | |
; dr = dr + yr[x][cr] + (y % 96); | |
LD A, (VAR_Y) | |
MODULO 96 | |
ADD A, (IX + 1) | |
EXX | |
ADD A, D | |
EXX | |
; r = dr / 12; | |
LD E, A | |
DIV12 | |
; if (r > 7){ | |
; r = 7; | |
; } | |
CLIP7 | |
ADD A, A | |
ADD A, A | |
LD L, A | |
; dr = dr - r * 12; | |
MUL3 | |
SUB A, E | |
NEG | |
; t = dr / 16; yr[x + 1][cw] = t; dr = dr - t; | |
LD E, A | |
DIV16A | |
LD (IY+2), A | |
SUB E | |
NEG | |
LD E, A | |
; t = dr / 3; yr[x][cw] = yr[x][cw] + t; dr = dr - t; | |
DIV3 | |
ADD A, (IY+1) | |
LD (IY+1),A | |
LD A, E | |
SUB D | |
LD E, A | |
; t = dr * 3 / 10; yr[x - 1][cw] = yr[x - 1][cw] + t; | |
; dr = dr - t; | |
MUL3 | |
DIV10 | |
ADD A, (IY+0) | |
LD (IY+0),A | |
LD A, E | |
SUB D | |
EXX | |
LD D, A | |
EXX | |
LD DE, BUFSIZ | |
ADD IX, DE | |
ADD IY, DE | |
; dg = dg + yg[x][cr] + (x % 128); | |
EXX | |
LD A, B | |
EXX | |
MODULO 128 | |
ADD A, (IX + 1) | |
EXX | |
ADD A, E | |
EXX | |
JP NC, RCLIP | |
LD A, 0FFH | |
RCLIP: | |
; g = dg / 16; | |
LD E, A | |
DIV16A | |
; if (g > 7){ | |
; g = 7; | |
; } | |
CLIP7 | |
MUL32 | |
LD H, A | |
; dg = dg - g * 16; | |
RRA | |
SUB A, E | |
NEG | |
LD E, A | |
; t = dg / 16; yg[x + 1][cw] = t; dg = dg - t; | |
DIV16A | |
LD (IY+2), A | |
SUB A, E | |
NEG | |
LD E, A | |
; t = dg / 3; yg[x][cw] = yg[x][cw] + t; dg = dg - t; | |
DIV3 | |
ADD A, (IY + 1) | |
LD (IY+1), A | |
LD A, E | |
SUB D | |
LD E, A | |
; t = dg * 3 / 10; yg[x - 1][cw] = yg[x - 1][cw] + t; | |
; dg = dg - t; | |
MUL3 | |
DIV10 | |
ADD A, (IY+0) | |
LD (IY+0),A | |
LD A,E | |
SUB D | |
EXX | |
LD E, A | |
EXX | |
; c = color(g * 32 + r * 4 + b1 + x / 128) | |
LD A, (B1) | |
ADD A, H | |
ADD A, L | |
LD D, A | |
EXX | |
LD A, B | |
EXX | |
LD E, A | |
AND 128 | |
JP Z, DIV128 | |
INC D | |
DIV128: | |
; img.setrgb(x, y, c); | |
LD A, (WRVDP) | |
LD C, A | |
INC C | |
LD A, (VAR_Y) | |
DI | |
OUT (C), E | |
AND 3FH | |
OR 40H | |
OUT (C), A | |
DEC C | |
OUT (C), D | |
EI | |
LD DE, -BUFSIZ+1 | |
ADD IX, DE | |
ADD IY, DE | |
EXX | |
INC B | |
EXX | |
JP NZ, LOOPX | |
LD A,(VAR_Y) | |
INC A | |
LD (VAR_Y),A | |
CP 192 | |
JP NZ, LOOPY | |
RET | |
; IN A, B, C | |
; OUT A DIV | |
; USE B, C, D | |
DIV_12: | |
LD C, 0C0H | |
LD B, 5 | |
DIV_JP: | |
LD D, 0 | |
DIV_LP: | |
SLA D | |
SUB C | |
JP C, DIVM_N | |
DIV_NX: | |
INC D | |
SRL C | |
DJNZ DIV_LP | |
LD A, D | |
RET | |
DIVM_L: | |
SLA D | |
ADD C | |
JP C, DIV_NX | |
DIVM_N: | |
SRL C | |
DJNZ DIVM_L | |
LD A, D | |
RET | |
DIFFNR: DEFS BUFSIZ | |
DIFFNG: DEFS BUFSIZ | |
DUMMY: DEFB 0 | |
B1: DEFB 0 | |
VAR_Y: DEFB 0 | |
END |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment