mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-06-29 05:29:36 +00:00
hgr: vertical lines getting closer
colors are wrong
This commit is contained in:
parent
91a0f23a04
commit
4f285a2391
|
@ -184,6 +184,21 @@ void asl(void) {
|
||||||
// printf("ASL A=%x\n",a);
|
// printf("ASL A=%x\n",a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void asl_mem(int addr) {
|
||||||
|
int temp_a;
|
||||||
|
|
||||||
|
temp_a=ram[addr];
|
||||||
|
temp_a&=0xff;
|
||||||
|
|
||||||
|
c=!!(temp_a&0x80);
|
||||||
|
|
||||||
|
temp_a=temp_a<<1;
|
||||||
|
ram[addr]=(temp_a&0xff);
|
||||||
|
z=(ram[addr]==0);
|
||||||
|
n=!!(ram[addr]&0x80);
|
||||||
|
// printf("ASL %x=%x\n",addr,ram[addr]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ror(void) {
|
void ror(void) {
|
||||||
int temp_a;
|
int temp_a;
|
||||||
|
@ -290,6 +305,66 @@ void iny(void) {
|
||||||
n=!!(y&0x80);
|
n=!!(y&0x80);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void bit(int value) {
|
||||||
|
int temp_a;
|
||||||
|
|
||||||
|
temp_a=a&value;
|
||||||
|
temp_a&=0xff;
|
||||||
|
|
||||||
|
z=(temp_a==0);
|
||||||
|
|
||||||
|
n=(value&0x80);
|
||||||
|
v=(value&0x40);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void lda(int addr) {
|
||||||
|
|
||||||
|
a=ram[addr];
|
||||||
|
|
||||||
|
z=(a==0);
|
||||||
|
n=!!(a&0x80);
|
||||||
|
}
|
||||||
|
|
||||||
|
void lda_const(int value) {
|
||||||
|
|
||||||
|
a=value;
|
||||||
|
|
||||||
|
z=(a==0);
|
||||||
|
n=!!(a&0x80);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ldx(int addr) {
|
||||||
|
|
||||||
|
x=ram[addr];
|
||||||
|
|
||||||
|
z=(x==0);
|
||||||
|
n=!!(x&0x80);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ldx_const(int value) {
|
||||||
|
|
||||||
|
x=value;
|
||||||
|
|
||||||
|
z=(x==0);
|
||||||
|
n=!!(x&0x80);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ldy(int addr) {
|
||||||
|
|
||||||
|
y=ram[addr];
|
||||||
|
|
||||||
|
z=(y==0);
|
||||||
|
n=!!(y&0x80);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ldy_const(int value) {
|
||||||
|
|
||||||
|
y=value;
|
||||||
|
|
||||||
|
z=(y==0);
|
||||||
|
n=!!(y&0x80);
|
||||||
|
}
|
||||||
|
|
||||||
unsigned char high(int value) {
|
unsigned char high(int value) {
|
||||||
return (value>>8)&0xff;
|
return (value>>8)&0xff;
|
||||||
|
|
|
@ -17,6 +17,7 @@ void lsr(void);
|
||||||
void asl(void);
|
void asl(void);
|
||||||
void ror(void);
|
void ror(void);
|
||||||
void rol(void);
|
void rol(void);
|
||||||
|
void asl_mem(int addr);
|
||||||
void ror_mem(int addr);
|
void ror_mem(int addr);
|
||||||
void rol_mem(int addr);
|
void rol_mem(int addr);
|
||||||
void dex(void);
|
void dex(void);
|
||||||
|
@ -27,7 +28,14 @@ void tax(void);
|
||||||
void tay(void);
|
void tay(void);
|
||||||
void txa(void);
|
void txa(void);
|
||||||
void tya(void);
|
void tya(void);
|
||||||
|
void bit(int value);
|
||||||
|
void bit_mem(int addr);
|
||||||
|
void lda(int addr);
|
||||||
|
void lda_const(int value);
|
||||||
|
void ldx(int addr);
|
||||||
|
void ldx_const(int value);
|
||||||
|
void ldy(int addr);
|
||||||
|
void ldy_const(int value);
|
||||||
|
|
||||||
unsigned char high(int value);
|
unsigned char high(int value);
|
||||||
unsigned char low(int value);
|
unsigned char low(int value);
|
||||||
|
|
|
@ -226,6 +226,69 @@ move_right:
|
||||||
}
|
}
|
||||||
|
|
||||||
static void move_up_or_down(void) {
|
static void move_up_or_down(void) {
|
||||||
|
// F4D3
|
||||||
|
if (n==1) goto move_down;
|
||||||
|
|
||||||
|
c=0;
|
||||||
|
lda(GBASH);
|
||||||
|
bit(0x1c); // CON.1C
|
||||||
|
if (z!=1) goto mu_5;
|
||||||
|
asl_mem(GBASL);
|
||||||
|
if (c==1) goto mu_3;
|
||||||
|
bit(0x03); // CON.03
|
||||||
|
if (z==1) goto mu_1;
|
||||||
|
adc(0x1f);
|
||||||
|
c=1;
|
||||||
|
goto mu_4;
|
||||||
|
// F4Eb
|
||||||
|
mu_1:
|
||||||
|
adc(0x23);
|
||||||
|
pha();
|
||||||
|
lda(GBASL);
|
||||||
|
adc(0xb0);
|
||||||
|
if (c==1) goto mu_2;
|
||||||
|
adc(0xf0);
|
||||||
|
// f4f6
|
||||||
|
mu_2:
|
||||||
|
ram[GBASL]=a;
|
||||||
|
pla();
|
||||||
|
goto mu_4;
|
||||||
|
mu_3:
|
||||||
|
adc(0x1f);
|
||||||
|
mu_4:
|
||||||
|
ror_mem(GBASL);
|
||||||
|
mu_5:
|
||||||
|
adc(0xfc);
|
||||||
|
ud_1:
|
||||||
|
ram[GBASH]=a;
|
||||||
|
return;
|
||||||
|
|
||||||
|
// f505
|
||||||
|
move_down:
|
||||||
|
lda(GBASH);
|
||||||
|
adc(4);
|
||||||
|
bit(0x1c);
|
||||||
|
if (z!=1) goto ud_1;
|
||||||
|
asl_mem(GBASL);
|
||||||
|
if (c==0) goto md_2;
|
||||||
|
adc(0xe0);
|
||||||
|
c=0;
|
||||||
|
bit(0x4);
|
||||||
|
if (z==1) goto md_3;
|
||||||
|
lda(GBASL);
|
||||||
|
adc(0x50);
|
||||||
|
a=a^0xf0;
|
||||||
|
if (a==0) goto md_1;
|
||||||
|
a=a^0xf0;
|
||||||
|
md_1:
|
||||||
|
ram[GBASL]=a;
|
||||||
|
lda(HGR_PAGE);
|
||||||
|
goto md_3;
|
||||||
|
md_2:
|
||||||
|
adc(0xe0);
|
||||||
|
md_3:
|
||||||
|
ror_mem(GBASL);
|
||||||
|
goto ud_1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,7 +308,7 @@ static void hglin(void) {
|
||||||
a=a^0xff;
|
a=a^0xff;
|
||||||
adc(1);
|
adc(1);
|
||||||
pha();
|
pha();
|
||||||
a=0;
|
lda_const(0);
|
||||||
sbc(ram[HGR_QUADRANT]);
|
sbc(ram[HGR_QUADRANT]);
|
||||||
// F550
|
// F550
|
||||||
hglin_1:
|
hglin_1:
|
||||||
|
@ -264,18 +327,18 @@ hglin_1:
|
||||||
a=a^0xff;
|
a=a^0xff;
|
||||||
adc(0xfe);
|
adc(0xfe);
|
||||||
hglin_2:
|
hglin_2:
|
||||||
// F566
|
// F568
|
||||||
ram[HGR_DY]=a;
|
ram[HGR_DY]=a;
|
||||||
ram[HGR_Y]=y;
|
ram[HGR_Y]=y;
|
||||||
ror_mem(HGR_QUADRANT);
|
ror_mem(HGR_QUADRANT);
|
||||||
c=1;
|
c=1;
|
||||||
sbc(ram[HGR_DX]);
|
sbc(ram[HGR_DX]);
|
||||||
x=a;
|
x=a;
|
||||||
a=0xff;
|
lda_const(0xff);
|
||||||
sbc(ram[HGR_DX+1]);
|
sbc(ram[HGR_DX+1]);
|
||||||
ram[HGR_COUNT]=a;
|
ram[HGR_COUNT]=a;
|
||||||
y=ram[HGR_HORIZ];
|
ldy(HGR_HORIZ);
|
||||||
if (c==1) goto movex2; // always?
|
goto movex2; // always?
|
||||||
// f57c
|
// f57c
|
||||||
movex:
|
movex:
|
||||||
asl();
|
asl();
|
||||||
|
@ -284,32 +347,32 @@ movex:
|
||||||
|
|
||||||
// f581
|
// f581
|
||||||
movex2:
|
movex2:
|
||||||
a=ram[HGR_E];
|
lda(HGR_E);
|
||||||
adc(ram[HGR_DY]);
|
adc(ram[HGR_DY]);
|
||||||
ram[HGR_E]=a;
|
ram[HGR_E]=a;
|
||||||
a=ram[HGR_E+1];
|
lda(HGR_E+1);
|
||||||
sbc(0);
|
sbc(0);
|
||||||
movex2_1:
|
movex2_1:
|
||||||
ram[HGR_E+1]=a;
|
ram[HGR_E+1]=a;
|
||||||
a=ram[y_indirect(GBASL,y)];
|
lda(y_indirect(GBASL,y));
|
||||||
a=a^ram[HGR_BITS];
|
a=a^ram[HGR_BITS];
|
||||||
a=a&ram[HMASK];
|
a=a&ram[HMASK];
|
||||||
a=a^ram[y_indirect(GBASL,y)];
|
a=a^ram[y_indirect(GBASL,y)];
|
||||||
ram[y_indirect(GBASL,y)]=a;
|
ram[y_indirect(GBASL,y)]=a;
|
||||||
x++;
|
inx();
|
||||||
if (x!=0) goto movex2_2;
|
if (z!=1) goto movex2_2;
|
||||||
ram[HGR_COUNT]++;
|
ram[HGR_COUNT]++;
|
||||||
if (ram[HGR_COUNT]==0) return;
|
if (ram[HGR_COUNT]==0) return;
|
||||||
// F59e
|
// F59e
|
||||||
movex2_2:
|
movex2_2:
|
||||||
a=ram[HGR_QUADRANT];
|
lda(HGR_QUADRANT);
|
||||||
if (c==1) goto movex;
|
if (c==1) goto movex;
|
||||||
move_up_or_down();
|
move_up_or_down();
|
||||||
c=0;
|
c=0;
|
||||||
a=ram[HGR_E];
|
lda(HGR_E);
|
||||||
adc(ram[HGR_DX]);
|
adc(ram[HGR_DX]);
|
||||||
ram[HGR_E]=a;
|
ram[HGR_E]=a;
|
||||||
a=ram[HGR_E+1];
|
lda(HGR_E+1);
|
||||||
adc(ram[HGR_DX+1]);
|
adc(ram[HGR_DX+1]);
|
||||||
goto movex2_1;
|
goto movex2_1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
int yy,ch;
|
int xx,yy,ch;
|
||||||
|
|
||||||
grsim_init();
|
grsim_init();
|
||||||
|
|
||||||
|
@ -15,13 +15,20 @@ int main(int argc, char **argv) {
|
||||||
hgr();
|
hgr();
|
||||||
|
|
||||||
|
|
||||||
/* Put lines on screen */
|
/* Put horizontal lines on screen */
|
||||||
for(yy=0;yy<100;yy++) {
|
for(yy=0;yy<100;yy++) {
|
||||||
hcolor_equals(yy%8);
|
hcolor_equals(yy%8);
|
||||||
hplot(yy,yy);
|
hplot(yy,yy);
|
||||||
hplot_to(200,yy);
|
hplot_to(200,yy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Put vertical lines on screen */
|
||||||
|
for(xx=0;xx<100;xx+=2) {
|
||||||
|
hcolor_equals((xx%16)/2);
|
||||||
|
hplot(xx,159);
|
||||||
|
hplot_to(xx,100);
|
||||||
|
}
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
grsim_update();
|
grsim_update();
|
||||||
|
|
||||||
|
@ -32,6 +39,10 @@ int main(int argc, char **argv) {
|
||||||
usleep(100000);
|
usleep(100000);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
int i;
|
||||||
|
printf("20D0: ");
|
||||||
|
for(i=0;i<16;i++) printf("%x ",ram[0x20d0+i]);
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user