Rev 151 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?
MODULE mylib(16)
RSEG CODE(0)
RSEG UDATA0(0)
RSEG IDATA0(0)
RSEG CDATA0(0)
PUBLIC mylib_font8x8
PUBLIC putchar
PUBLIC scr_init
EXTERN ?CLZ80L_4_06_L00
EXTERN ?ENT_PARM_DIRECT_L09
EXTERN ?ENT_AUTO_DIRECT_L09
EXTERN ?LEAVE_DIRECT_L09
RSEG CODE
; 1. #include <string.h>
; 2. #include <intrz80.h>
; 3. #include <stdio.h>
; 4. char * mylib_font8x8=(void*)0x3c00;
; 5. static union {char * w;char b[2];}scrxy;
scr_init:
CALL ?ENT_PARM_DIRECT_L09
; 6. void scr_init(char a){
LD A,E
LD (22528),A
; 7. *((char *)0x5800)=a;
SRL E
SRL E
SRL E
LD A,E
OUT (254),A
; 8. output8(0xfe,a>>3);
LD BC,767
LD DE,22529
LD HL,22528
LDIR
; 9. memcpy((void *)0x5801, (void *)0x5800, 32*24-1);
LD HL,16384
LD (scrxy),HL
; 10. scrxy.w=(void *)0x4000;
XOR A
LD (16384),A
; 11. *((char *)0x4000)=0;
LD BC,6143
LD DE,16385
LDIR
; 12. memcpy((void *)0x4001, (void *)0x4000, (unsigned int)256*192/8-1);
JP ?LEAVE_DIRECT_L09
; 13. }
putchar:
CALL ?ENT_AUTO_DIRECT_L09
DEFW 65532
; 14. int putchar(int ch){
LD C,(IX+2)
LD B,(IX+3)
LD A,13
XOR C
OR B
JR Z,?0012
LD A,10
XOR C
OR B
JR NZ,?0013
?0011:
; 15. switch(ch){
LD A,(scrxy)
ADD A,32
LD (scrxy),A
?0012:
; 16. case '\n': scrxy.b[0]+=32;
LD A,(scrxy)
AND 224
LD (scrxy),A
; 17. case '\r': scrxy.b[0]&=0xe0;
JR ?0010
?0013:
; 18. break;
; 19. default:{
LD L,C
LD H,B
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD BC,(mylib_font8x8)
ADD HL,BC
EX DE,HL
; 20. char* s=mylib_font8x8+(ch<<3);
LD (IX-2),8
?0015:
; 21. unsigned char i=8;
LD B,(IX-2)
DEC (IX-2)
INC B
DEC B
JR Z,?0014
?0016:
; 22. while(i--){
LD L,E
LD H,D
INC DE
LD B,(HL)
LD HL,(scrxy)
LD (HL),B
; 23. *scrxy.w=*(s++);
LD HL,scrxy+1
INC (HL)
; 24. scrxy.b[1]++;
; 25. }
JR ?0015
?0014:
; 26. }
LD HL,scrxy
LD A,(HL)
SUB 255
LD (HL),A
INC HL
LD A,(HL)
SBC A,7
LD (HL),A
; 27. scrxy.w-=0x07ff;
?0010:
; 28. break;
; 29. }
LD A,(scrxy)
OR A
JR NZ,?0020
?0017:
; 30. if(!scrxy.b[0]){
LD A,(scrxy+1)
ADD A,8
LD (scrxy+1),A
CP 88
JR NZ,?0020
?0019:
LD A,64
LD (scrxy+1),A
?0020:
?0018:
; 31. if((scrxy.b[1]+=8)==0x58) scrxy.b[1]=0x40;
; 32. }
LD HL,1
; 33. return 1;
JP ?LEAVE_DIRECT_L09
; 34. }
RSEG UDATA0
scrxy:
DEFS 2
RSEG IDATA0
mylib_font8x8:
DEFS 2
RSEG CDATA0
DEFW 15360
END