diff --git a/th05/music/piano.h b/th05/music/piano.h index 32c14bce..283961c9 100644 --- a/th05/music/piano.h +++ b/th05/music/piano.h @@ -1,3 +1,9 @@ +#define PIANO_X 384 +#define PIANO_Y 64 +#define PIANO_H 15 +#define PIANO_PADDING_BOTTOM 3 +#define PIANO_H_PADDED (PIANO_H + PIANO_PADDING_BOTTOM) + // Using the same naming convention as for the gaiji characters... #pragma option -b- typedef enum { @@ -18,5 +24,21 @@ typedef enum { extern const unsigned char PIANO_LABEL_FONT[pl_COUNT][PIANO_LABEL_FONT_H]; +#define PIANO_LABEL_DIST_X 32 +#define PIANO_LABEL_DIST_Y 4 + +#define PIANO_LABEL_X(col) (PIANO_X - PIANO_LABEL_DIST_X + (col * PIANO_LABEL_FONT_W)) +#define PIANO_LABEL_Y(row) (PIANO_Y + PIANO_LABEL_DIST_Y + (row * PIANO_H_PADDED)) + // Assumes that the GRCG is active. +#define piano_label_puts(row, chr1, chr2, chr3) \ + piano_label_putc(0, row, chr1); \ + piano_label_putc(1, row, chr2); \ + piano_label_putc(2, row, chr3); \ + +#define piano_label_putc(col, row, chr) \ + _AL = chr; \ + _DI = (PIANO_LABEL_Y(row) * ROW_SIZE) + (PIANO_LABEL_X(col) / 8); \ + piano_label_put_raw(); + void pascal piano_label_put_raw(); diff --git a/th05/music/piano.inc b/th05/music/piano.inc new file mode 100644 index 00000000..245fb416 --- /dev/null +++ b/th05/music/piano.inc @@ -0,0 +1,23 @@ +PIANO_X = 384 +PIANO_Y = 64 +PIANO_H = 15 +PIANO_PADDING_BOTTOM = 3 +PIANO_H_PADDED = (PIANO_H + PIANO_PADDING_BOTTOM) + +PIANO_LABEL_DIST_X = 32 +PIANO_LABEL_DIST_Y = 4 + +PIANO_LABEL_X = PIANO_X - PIANO_LABEL_DIST_X +PIANO_LABEL_Y = PIANO_Y + PIANO_LABEL_DIST_Y + +piano_label_puts macro row:req, chr1:req, chr2:req, chr3:req + piano_label_putc 0, row, chr1 + piano_label_putc 1, row, chr2 + piano_label_putc 2, row, chr3 +endm + +piano_label_putc macro col:req, row:req, chr:req + mov al, chr + mov di, ((PIANO_LABEL_Y + (row * PIANO_H_PADDED)) * ROW_SIZE) + ((PIANO_LABEL_X + (col * PIANO_LABEL_FONT_W)) / 8) + call piano_label_put_raw +endm diff --git a/th05_op.asm b/th05_op.asm index 5085661b..95f7a6e3 100644 --- a/th05_op.asm +++ b/th05_op.asm @@ -22,6 +22,7 @@ include ReC98.inc include th05/th05.inc include th05/music/music.inc +include th05/music/piano.inc extern SCOPY@:proc extern _execl:proc @@ -5133,74 +5134,26 @@ sub_D894 proc far mov ax, 0A800h mov es, ax assume es:nothing - mov di, 1400h + mov di, (PIANO_Y + (0 * PIANO_H_PADDED)) * ROW_SIZE call sub_DA30 - mov di, 19A0h + mov di, (PIANO_Y + (1 * PIANO_H_PADDED)) * ROW_SIZE call sub_DA30 - mov di, 1F40h + mov di, (PIANO_Y + (2 * PIANO_H_PADDED)) * ROW_SIZE call sub_DA30 - mov di, 24E0h + mov di, (PIANO_Y + (3 * PIANO_H_PADDED)) * ROW_SIZE call sub_DA30 - mov di, 2A80h + mov di, (PIANO_Y + (4 * PIANO_H_PADDED)) * ROW_SIZE call sub_DA30 - mov di, 3020h + mov di, (PIANO_Y + (5 * PIANO_H_PADDED)) * ROW_SIZE call sub_DA30 mov ah, GC_RI call grcg_setcolor_direct_noint_1 - mov al, pl_F - mov di, 156Ch - call piano_label_put_raw - mov al, pl_M - mov di, 156Dh - call piano_label_put_raw - mov al, pl_1 - mov di, 156Eh - call piano_label_put_raw - mov al, pl_F - mov di, 1B0Ch - call piano_label_put_raw - mov al, pl_M - mov di, 1B0Dh - call piano_label_put_raw - mov al, pl_2 - mov di, 1B0Eh - call piano_label_put_raw - mov al, pl_F - mov di, 20ACh - call piano_label_put_raw - mov al, pl_M - mov di, 20ADh - call piano_label_put_raw - mov al, pl_3 - mov di, 20AEh - call piano_label_put_raw - mov al, pl_F - mov di, 264Ch - call piano_label_put_raw - mov al, pl_M - mov di, 264Dh - call piano_label_put_raw - mov al, pl_4 - mov di, 264Eh - call piano_label_put_raw - mov al, pl_F - mov di, 2BECh - call piano_label_put_raw - mov al, pl_M - mov di, 2BEDh - call piano_label_put_raw - mov al, pl_5 - mov di, 2BEEh - call piano_label_put_raw - mov al, pl_S - mov di, 318Ch - call piano_label_put_raw - mov al, pl_S - mov di, 318Dh - call piano_label_put_raw - mov al, pl_G - mov di, 318Eh - call piano_label_put_raw + piano_label_puts 0, pl_F, pl_M, pl_1 + piano_label_puts 1, pl_F, pl_M, pl_2 + piano_label_puts 2, pl_F, pl_M, pl_3 + piano_label_puts 3, pl_F, pl_M, pl_4 + piano_label_puts 4, pl_F, pl_M, pl_5 + piano_label_puts 5, pl_S, pl_S, pl_G GRCG_OFF_VIA_XOR al push ds mov ah, PMD_GET_WORKAREA_ADDRESS @@ -5227,31 +5180,31 @@ sub_D96E proc far GRCG_SETMODE_VIA_MOV al, GC_RMW mov ax, 0A800h mov es, ax - mov di, 3020h + mov di, (PIANO_Y + (5 * PIANO_H_PADDED)) * ROW_SIZE call sub_DA30 lds bx, dword_1281A - mov di, 1400h + mov di, (PIANO_Y + (0 * PIANO_H_PADDED)) * ROW_SIZE mov si, 0 call sub_D9E2 add bx, 2 - mov di, 19A0h + mov di, (PIANO_Y + (1 * PIANO_H_PADDED)) * ROW_SIZE mov si, 1 call sub_D9E2 add bx, 2 - mov di, 1F40h + mov di, (PIANO_Y + (2 * PIANO_H_PADDED)) * ROW_SIZE mov si, 2 call sub_D9E2 add bx, 2 - mov di, 24E0h + mov di, (PIANO_Y + (3 * PIANO_H_PADDED)) * ROW_SIZE mov si, 3 call sub_D9E2 add bx, 2 - mov di, 2A80h + mov di, (PIANO_Y + (4 * PIANO_H_PADDED)) * ROW_SIZE mov si, 4 call sub_D9E2 mov ah, GC_RI call grcg_setcolor_direct_noint_1 - mov di, 3020h + mov di, (PIANO_Y + (5 * PIANO_H_PADDED)) * ROW_SIZE add bx, 4 call sub_DA12 call near ptr sub_DA6B