; ; kanji CP/M for PC-8801 with PS88-104-2W ; ; revision history ; 0.0: Jul. 29, 1987 by Dai ISHIJIMA ; 0.1: Sep. 3, 1987 ; 0.2: Sep. 19, 1987 ; 0.3: Oct. 1, 1987 ; .z80 ; z80 mode 0000' aseg ; absolute segment ; ; hardware dependent items C000 vrmtop equ 0c000h ; top addr. of video ram 3E80 vrsize equ 16000 ; size of video ram 0500 scrbyt equ 1280 ; size for scroll (80 * 16) 0050 lnsize equ 80 ; 1 dot line equals to 80 bytes 00C8 nlines equ 200 ; 1 page equals to 200 lines C180 nxbank equ 0c180h ; distance to next bank 005C bank1 equ 5ch ; select graphics vram 1 005D bank2 equ 5dh 005E bank3 equ 5eh 005F mainrm equ 5fh ; select main ram 0070 txtwin equ 70h ; port no. of select window 0050 width equ 80 ; text width 0018 height equ 24 ; text height 0001 pstb equ 00000001b ; printer strobe 0010 flash equ 00010000b ; flashing on 0020 buzzer equ 00100000b ; beep on 07D0 belcnt equ 2000 ; timer of buzzer ; ; ps88-104-2w dependent items CA00 bios equ 0ca00h ; start addr. of bios DC91 x equ bios+1291h ; work area DC90 y equ bios+1290h ; ; kanji bios dependent items EFFF newsp equ 0efffh C000 font equ 0c000h 0020 curoff equ 20h 0010 hsize equ 16 ; 001B ch_esc equ 1bh 0010 maxeln equ 16 ; max. length of esc. command 0000 e_end equ 0 ; end mark of esc. table 00FE varlen equ 254 ; 0004 f_revs equ 00000100b 0002 f_ulin equ 00000010b 0001 f_bold equ 00000001b ; ; macros cphlde MACRO push hl or a sbc hl,de pop hl ENDM ; ; ; start org 0e600h ; E600 main: E600 ED 73 ED35 ld (spsave),sp E604 31 EFFF ld sp,newsp E607 F5 push af E608 C5 push bc E609 D5 push de E60A E5 push hl E60B DD E5 push ix ; E60D 3A ED3D ld a,(esccnt) E610 B7 or a E611 C2 E742 jp nz,escseq ; E614 3A ED38 ld a,(kanji1) E617 B7 or a E618 20 2E jr nz,kankan ; E61A 3A ED3B ld a,(literl) E61D B7 or a E61E 20 5D jr nz,litr ; E620 notknj: E620 79 ld a,c E621 FE 20 cp ' ' E623 38 66 jr c,ctrls ; E625 char: E625 FE 81 cp 81h E627 38 0C jr c,ank E629 FE A0 cp 0a0h E62B 38 15 jr c,kanji E62D FE E0 cp 0e0h E62F 38 04 jr c,ank E631 FE F0 cp 0f0h E633 38 0D jr c,kanji E635 ank: E635 CD E8FA call puta E638 CD E8A4 call cursor E63B AF xor a E63C 32 ED38 ld (kanji1),a E63F C3 E672 jp rtn E642 kanji: E642 32 ED38 ld (kanji1),a E645 C3 E672 jp rtn ; E648 kankan: ; E648 67 ld h,a E649 69 ld l,c E64A CD E95A call tojis E64D B7 or a E64E 28 15 jr z,pkanji E650 7D ld a,l E651 32 ED38 ld (kanji1),a E654 7C ld a,h E655 CD E8FA call puta E658 CD E8A4 call cursor E65B 3A ED38 ld a,(kanji1) E65E 4F ld c,a E65F AF xor a E660 32 ED38 ld (kanji1),a E663 18 BB jr notknj E665 pkanji: E665 CD E90E call putk E668 CD E8A4 call cursor E66B AF xor a E66C 32 ED38 ld (kanji1),a E66F C3 E672 jp rtn ; ; E672 rtn: E672 DD E1 pop ix E674 E1 pop hl E675 D1 pop de E676 C1 pop bc E677 F1 pop af E678 ED 7B ED35 ld sp,(spsave) E67C C9 ret ; ; E67D litr: E67D 79 ld a,c E67E CD E8FA call puta E681 CD E8A4 call cursor E684 AF xor a E685 32 ED3B ld (literl),a E688 C3 E672 jp rtn ; ; E68B ctrls: E68B 6F ld l,a E68C 26 00 ld h,0 E68E 29 add hl,hl E68F 11 ED42 ld de,ctltab E692 19 add hl,de E693 5E ld e,(hl) E694 23 inc hl E695 56 ld d,(hl) E696 21 E69C ld hl,ctlret E699 E5 push hl E69A D5 push de E69B C9 ret E69C ctlret: E69C C3 E672 jp rtn ; E69F c_null: E69F B7 or a E6A0 C8 ret z E6A1 CD E8FA call puta E6A4 CD E8A4 call cursor E6A7 C9 ret ; E6A8 c_bell: ; beep E6A8 3A ED37 ld a,(save40) E6AB F6 20 or buzzer E6AD 32 ED37 ld (save40),a E6B0 D3 40 out (40h),a E6B2 01 07D0 ld bc,belcnt E6B5 lbell: E6B5 0B dec bc E6B6 78 ld a,b E6B7 B1 or c E6B8 20 FB jr nz,lbell E6BA 3A ED37 ld a,(save40) E6BD E6 DF and not buzzer E6BF 32 ED37 ld (save40),a E6C2 D3 40 out (40h),a E6C4 C9 ret ; E6C5 c_bs: ; back space E6C5 3E FF ld a,255 E6C7 2A DC90 ld hl,(y) E6CA 25 dec h E6CB BC cp h E6CC 20 09 jr nz,bs1 E6CE 26 4F ld h,width-1 E6D0 2D dec l E6D1 BD cp l E6D2 20 03 jr nz,bs1 E6D4 21 0000 ld hl,0 E6D7 bs1: E6D7 22 DC90 ld (y),hl E6DA CD E8A4 call cursor E6DD C9 ret ; E6DE c_tab: ; horizontal tabulation E6DE 3A DC91 ld a,(x) E6E1 C6 08 add a,8 E6E3 E6 F8 and 0f8h E6E5 32 DC91 ld (x),a E6E8 CD E8A4 call cursor E6EB C9 ret ; E6EC c_lf: ; line feed E6EC 21 DC90 ld hl,y E6EF 34 inc (hl) E6F0 7E ld a,(hl) E6F1 FE 18 cp height E6F3 38 0A jr c,lf1 E6F5 3A ED3C ld a,(eline) E6F8 B7 or a E6F9 28 04 jr z,lf1 E6FB AF xor a E6FC 32 DC90 ld (y),a E6FF lf1: E6FF CD E8A4 call cursor E702 3A ED3C ld a,(eline) E705 B7 or a E706 C4 E80B call nz,e_elin E709 C9 ret ; E70A c_home: ; home E70A 21 0000 ld hl,0 E70D 22 DC90 ld (y),hl E710 CD E8A4 call cursor E713 C9 ret ; E714 c_ret: ; carridge return E714 AF xor a E715 32 DC91 ld (x),a E718 CD E8A4 call cursor E71B C9 ret ; E71C c_esc: ; escape E71C 3E FF ld a,255 E71E 32 ED3D ld (esccnt),a E721 C9 ret ; E722 c_fson: ; flashing on E722 3A ED37 ld a,(save40) E725 F6 10 or flash E727 32 ED37 ld (save40),a E72A C9 ret ; E72B c_fsof: ; flashing off E72B 3A ED37 ld a,(save40) E72E E6 EF and not flash E730 32 ED37 ld (save40),a E733 C9 ret ; E734 c_litr: ; literal next char. E734 AF xor a E735 3D dec a E736 32 ED3B ld (literl),a E739 C9 ret ; E73A c_eln: ; toggle line feed with erase line switch E73A 3A ED3C ld a,(eline) E73D 2F cpl E73E 32 ED3C ld (eline),a E741 C9 ret ; ; E742 escseq: E742 FE FF cp 255 E744 20 2F jr nz,escput E746 79 ld a,c E747 06 00 ld b,0 E749 21 EC35 ld hl,buffer E74C 22 ED3E ld (escptr),hl E74F 21 ED82 ld hl,esctab E752 eloop: E752 56 ld d,(hl) E753 23 inc hl E754 14 inc d E755 15 dec d ; table end? E756 28 47 jr z,escerr E758 BA cp d E759 28 06 jr z,found E75B 23 inc hl E75C 23 inc hl E75D 23 inc hl E75E 04 inc b E75F 18 F1 jr eloop E761 found: E761 7E ld a,(hl) E762 32 ED3D ld (esccnt),a E765 68 ld l,b E766 26 00 ld h,0 E768 29 add hl,hl E769 29 add hl,hl E76A 11 ED84 ld de,esctab+2 E76D 19 add hl,de E76E 5E ld e,(hl) E76F 23 inc hl E770 56 ld d,(hl) E771 ED 53 ED40 ld (escpad),de ; E775 escput: E775 2A ED3E ld hl,(escptr) E778 71 ld (hl),c E779 23 inc hl E77A 22 ED3E ld (escptr),hl E77D 3A ED3D ld a,(esccnt) E780 FE FE cp varlen E782 20 12 jr nz,fixlen E784 3E 1F ld a,' '-1 E786 B9 cp c E787 30 4E jr nc,proces E789 11 EC45 ld de,buffer+maxeln cphlde E78C E5 + push hl E78D B7 + or a E78E ED 52 + sbc hl,de E790 E1 + pop hl E791 28 0C jr z,escerr E793 C3 E672 jp rtn E796 fixlen: E796 3D dec a E797 28 3E jr z,proces E799 32 ED3D ld (esccnt),a E79C C3 E672 jp rtn ; E79F escerr: E79F F5 push af E7A0 3E 1B ld a,ch_esc E7A2 CD E8FA call puta E7A5 CD E8A4 call cursor E7A8 F1 pop af E7A9 4F ld c,a E7AA 11 EC35 ld de,buffer E7AD 2A ED3E ld hl,(escptr) E7B0 B7 or a E7B1 ED 52 sbc hl,de E7B3 45 ld b,l E7B4 28 13 jr z,escer1 E7B6 21 EC35 ld hl,buffer ; E7B9 errput: E7B9 7E ld a,(hl) E7BA 23 inc hl E7BB F5 push af E7BC C5 push bc E7BD E5 push hl E7BE CD E8FA call puta E7C1 CD E8A4 call cursor E7C4 E1 pop hl E7C5 C1 pop bc E7C6 F1 pop af E7C7 10 F0 djnz errput ; E7C9 escer1: E7C9 79 ld a,c E7CA CD E8FA call puta E7CD CD E8A4 call cursor E7D0 AF xor a E7D1 32 ED3D ld (esccnt),a E7D4 C3 E672 jp rtn ; E7D7 proces: E7D7 ED 5B ED40 ld de,(escpad) ; de <- jump vector E7DB 21 E7E4 ld hl,escret E7DE E5 push hl ; set return address E7DF D5 push de ; set jump vector E7E0 21 EC35 ld hl,buffer E7E3 C9 ret ; call subroutine ; E7E4 escret: E7E4 AF xor a E7E5 32 ED3D ld (esccnt),a E7E8 C3 E672 jp rtn ; E7EB e_cls: E7EB AF xor a E7EC 32 DC91 ld (x),a E7EF 32 DC90 ld (y),a E7F2 CD EA88 call hcls E7F5 CD E8A4 call cursor E7F8 C9 ret ; E7F9 e_curs: E7F9 23 inc hl E7FA 7E ld a,(hl) E7FB 23 inc hl E7FC D6 20 sub curoff E7FE 32 DC90 ld (y),a E801 7E ld a,(hl) E802 D6 20 sub curoff E804 32 DC91 ld (x),a E807 CD E8A4 call cursor E80A C9 ret ; E80B e_elin: E80B CD E8F4 call flush E80E CD E92E call getadd E811 3A DC91 ld a,(x) E814 B7 or a E815 20 0D jr nz,eln0 E817 3A DC90 ld a,(y) E81A FE 0C cp 12 E81C 28 06 jr z,eln0 E81E 06 10 ld b,hsize E820 CD EAA0 call eralin E823 C9 ret ; E824 eln0: E824 3A DC91 ld a,(x) E827 ED 44 neg E829 C6 50 add a,width E82B 47 ld b,a E82C 3E 10 ld a,16 E82E eln1: E82E C5 push bc E82F E5 push hl E830 F3 di E831 CD EA60 call sel E834 ED 79 out (c),a E836 eln2: E836 36 00 ld (hl),0 E838 23 inc hl E839 10 FB djnz eln2 E83B D3 5F out (mainrm),a E83D CD EA6E call disel E840 FB ei E841 E1 pop hl E842 C1 pop bc E843 11 0050 ld de,lnsize E846 19 add hl,de E847 11 FE80 ld de,vrmtop+vrsize cphlde E84A E5 + push hl E84B B7 + or a E84C ED 52 + sbc hl,de E84E E1 + pop hl E84F 38 05 jr c,eln3 E851 11 C180 ld de,nxbank E854 19 add hl,de E855 0C inc c E856 eln3: E856 3D dec a E857 20 D5 jr nz,eln1 E859 C9 ret ; E85A e_r_of: E85A 3A ED3A ld a,(cattr) E85D E6 FB and not f_revs E85F 32 ED3A ld (cattr),a E862 C9 ret ; E863 e_r_on: E863 3A ED3A ld a,(cattr) E866 F6 04 or f_revs E868 32 ED3A ld (cattr),a E86B C9 ret ; E86C e_u_of: E86C 3A ED3A ld a,(cattr) E86F E6 FD and not f_ulin E871 32 ED3A ld (cattr),a E874 C9 ret ; E875 e_u_on: E875 3A ED3A ld a,(cattr) E878 F6 02 or f_ulin E87A 32 ED3A ld (cattr),a E87D C9 ret ; E87E e_b_of: E87E 3A ED3A ld a,(cattr) E881 E6 FE and not f_bold E883 32 ED3A ld (cattr),a E886 C9 ret ; E887 e_b_on: E887 3A ED3A ld a,(cattr) E88A F6 01 or f_bold E88C 32 ED3A ld (cattr),a E88F C9 ret ; E890 e_cons: E890 23 inc hl E891 skipc: E891 7E ld a,(hl) E892 23 inc hl E893 FE 2C cp ',' E895 20 FA jr nz,skipc E897 C9 ret ; E898 e_colr: E898 23 inc hl E899 7E ld a,(hl) E89A D6 30 sub '0' E89C 21 ED39 ld hl,cmode E89F AE xor (hl) E8A0 32 ED3A ld (cattr),a E8A3 C9 ret ; ; E8A4 cursor: E8A4 3A DC91 ld a,(x) E8A7 FE 50 cp width E8A9 38 1E jr c,ycheck E8AB AF xor a E8AC 32 DC91 ld (x),a E8AF 21 DC90 ld hl,y E8B2 34 inc (hl) E8B3 3A ED3C ld a,(eline) E8B6 B7 or a E8B7 28 10 jr z,ycheck E8B9 3A DC90 ld a,(y) E8BC FE 18 cp height E8BE 38 04 jr c,nhome E8C0 AF xor a E8C1 32 DC90 ld (y),a E8C4 nhome: E8C4 CD E80B call e_elin E8C7 18 0F jr dspcur ; E8C9 ycheck: E8C9 3A DC90 ld a,(y) E8CC FE 18 cp height E8CE 38 08 jr c,dspcur E8D0 3E 17 ld a,height-1 E8D2 32 DC90 ld (y),a E8D5 CD EBAE call roll E8D8 dspcur: E8D8 3E 81 ld a,81h ; mPD3301 command -- E8DA D3 51 out (51h),a ; cursor display E8DC 3A DC91 ld a,(x) E8DF D3 50 out (50h),a E8E1 3A DC90 ld a,(y) E8E4 D3 50 out (50h),a E8E6 C9 ret ; E8E7 waitvr: ; wait until vertical retrace E8E7 3A ED37 ld a,(save40) E8EA E6 10 and 10h E8EC C0 ret nz E8ED w40: ; E8ED DB 40 in a,(40h) E8EF E6 20 and 20h E8F1 28 FA jr z,w40 E8F3 C9 ret E8F4 flush: ; E8F4 3A ED37 ld a,(save40) E8F7 D3 40 out (40h),a E8F9 C9 ret ; ; E8FA puta: ; set ascii code into A E8FA 06 00 ld b,0 E8FC 4F ld c,a ; set char. code into BC E8FD CD EB12 call ankfnt ; read ank font E900 CD E9E9 call attrib E903 CD E92E call getadd E906 CD EB37 call putank E909 21 DC91 ld hl,x E90C 34 inc (hl) E90D C9 ret ; ; E90E putk: ; set jis code into HL!!!!! E90E CD EAF4 call knjfnt E911 CD EA1E call kattrb E914 3A DC91 ld a,(x) E917 FE 4F cp width-1 E919 20 07 jr nz,putk1 E91B 3C inc a E91C 32 DC91 ld (x),a E91F CD E8A4 call cursor E922 putk1: E922 CD E92E call getadd E925 CD EB6F call putkan E928 21 DC91 ld hl,x E92B 34 inc (hl) E92C 34 inc (hl) E92D C9 ret ; ; E92E getadd: ; get vram address(HL) & port no.(C) E92E 3A DC91 ld a,(x) E931 16 00 ld d,0 E933 5F ld e,a E934 3A DC90 ld a,(y) E937 2E 00 ld l,0 E939 67 ld h,a E93A E5 push hl E93B 29 add hl,hl E93C 29 add hl,hl E93D C1 pop bc E93E 09 add hl,bc ; E93F D5 push de E940 11 3E80 ld de,vrsize E943 EB ex de,hl cphlde E944 E5 + push hl E945 B7 + or a E946 ED 52 + sbc hl,de E948 E1 + pop hl E949 EB ex de,hl E94A 0E 5C ld c,bank1 E94C 30 05 jr nc,shita E94E 0C inc c E94F 11 C180 ld de,nxbank E952 19 add hl,de E953 shita: E953 11 C000 ld de,vrmtop E956 19 add hl,de E957 D1 pop de E958 19 add hl,de E959 C9 ret ; ; E95A tojis: ; shift jis (hl) -> jis (hl) E95A 7D ld a,l E95B FE 40 cp 40h E95D 38 19 jr c,errtj E95F FE FD cp 0fdh E961 30 15 jr nc,errtj E963 FE 7F cp 7fh E965 28 11 jr z,errtj E967 7C ld a,h E968 FE 81 cp 81h E96A 38 0C jr c,errtj E96C FE A0 cp 0a0h E96E 38 0B jr c,grp1 E970 FE E0 cp 0e0h E972 38 04 jr c,errtj E974 FE F0 cp 0f0h E976 38 07 jr c,grp2 E978 errtj: E978 3E FF ld a,255 E97A C9 ret E97B grp1: E97B D6 70 sub 70h E97D 18 02 jr shift E97F grp2: E97F D6 B0 sub 0b0h E981 shift: E981 87 add a,a E982 67 ld h,a E983 7D ld a,l E984 FE 80 cp 80h E986 38 05 jr c,if2 E988 FE 9F cp 9fh E98A 30 01 jr nc,if2 E98C 3D dec a E98D if2: E98D FE 9F cp 9fh E98F 38 04 jr c,else2 E991 D6 5F sub 5fh E993 18 01 jr sftend E995 25 else2: dec h E996 sftend: E996 D6 1F sub 1fh E998 6F ld l,a E999 AF xor a E99A C9 ret ; ; E99B knjadd: ; get kanji address E99B 7C ld a,h E99C FE 30 cp 30h E99E 30 26 jr nc,ykanji E9A0 nkanji: E9A0 E5 push hl E9A1 3E 60 ld a,60h E9A3 A5 and l E9A4 67 ld h,a E9A5 2E 00 ld l,0 E9A7 CB 3C srl h E9A9 CB 1D rr l E9AB E5 push hl E9AC C1 pop bc E9AD E1 pop hl E9AE E5 push hl E9AF 2E 00 ld l,0 E9B1 3E 07 ld a,7 E9B3 A4 and h E9B4 67 ld h,a E9B5 29 add hl,hl E9B6 E5 push hl E9B7 D1 pop de E9B8 E1 pop hl E9B9 26 00 ld h,0 E9BB 3E 1F ld a,1fh E9BD A5 and l E9BE 6F ld l,a E9BF 29 add hl,hl E9C0 29 add hl,hl E9C1 29 add hl,hl E9C2 29 add hl,hl E9C3 19 add hl,de E9C4 09 add hl,bc E9C5 C9 ret E9C6 ykanji: E9C6 E5 push hl E9C7 3E 60 ld a,60h E9C9 A5 and l E9CA 67 ld h,a E9CB 2E 00 ld l,0 E9CD 29 add hl,hl E9CE E5 push hl E9CF C1 pop bc E9D0 E1 pop hl E9D1 E5 push hl E9D2 2E 00 ld l,0 E9D4 3E 1F ld a,1fh E9D6 A4 and h E9D7 67 ld h,a E9D8 29 add hl,hl E9D9 E5 push hl E9DA D1 pop de E9DB E1 pop hl E9DC 26 00 ld h,0 E9DE 3E 1F ld a,1fh E9E0 A5 and l E9E1 6F ld l,a E9E2 29 add hl,hl E9E3 29 add hl,hl E9E4 29 add hl,hl E9E5 29 add hl,hl E9E6 19 add hl,de E9E7 09 add hl,bc E9E8 C9 ret ; ; E9E9 attrib: ; ank attribute E9E9 3A ED3A ld a,(cattr) E9EC B7 or a E9ED C8 ret z E9EE E6 01 and f_bold E9F0 28 0D jr z,undlin E9F2 21 EC35 ld hl,buffer E9F5 06 10 ld b,16 E9F7 bold1: E9F7 7E ld a,(hl) E9F8 CB 27 sla a E9FA B6 or (hl) E9FB 77 ld (hl),a E9FC 23 inc hl E9FD 10 F8 djnz bold1 E9FF undlin: E9FF 3A ED3A ld a,(cattr) EA02 E6 02 and f_ulin EA04 28 05 jr z,revrs EA06 21 EC44 ld hl,buffer+15 EA09 36 FF ld (hl),0ffh EA0B revrs: EA0B 3A ED3A ld a,(cattr) EA0E E6 04 and f_revs EA10 28 0B jr z,retatr EA12 21 EC35 ld hl,buffer EA15 06 10 ld b,16 EA17 rev1: EA17 7E ld a,(hl) EA18 2F cpl EA19 77 ld (hl),a EA1A 23 inc hl EA1B 10 FA djnz rev1 EA1D retatr: EA1D C9 ret ; EA1E kattrb: ; kanji attribute EA1E 3A ED3A ld a,(cattr) EA21 B7 or a EA22 C8 ret z EA23 E6 01 and f_bold EA25 28 17 jr z,kuln EA27 21 EC35 ld hl,buffer EA2A 06 10 ld b,16 EA2C kbold1: EA2C 56 ld d,(hl) EA2D 23 inc hl EA2E 5E ld e,(hl) EA2F CB 3A srl d EA31 CB 1B rr e EA33 2B dec hl EA34 7E ld a,(hl) EA35 B2 or d EA36 77 ld (hl),a EA37 23 inc hl EA38 7E ld a,(hl) EA39 B3 or e EA3A 77 ld (hl),a EA3B 23 inc hl EA3C 10 EE djnz kbold1 EA3E kuln: EA3E 3A ED3A ld a,(cattr) EA41 E6 02 and f_ulin EA43 28 08 jr z,krevrs EA45 21 EC53 ld hl,buffer+30 EA48 36 FF ld (hl),0ffh EA4A 23 inc hl EA4B 36 FF ld (hl),0ffh EA4D krevrs: EA4D 3A ED3A ld a,(cattr) EA50 E6 04 and f_revs EA52 28 0B jr z,katret EA54 21 EC35 ld hl,buffer EA57 06 20 ld b,32 EA59 krev1: EA59 7E ld a,(hl) EA5A 2F cpl EA5B 77 ld (hl),a EA5C 23 inc hl EA5D 10 FA djnz krev1 EA5F katret: EA5F C9 ret ; ; EA60 sel: ; select text window EA60 E3 ex (sp),hl EA61 F5 push af EA62 7C ld a,h EA63 D3 70 out (txtwin),a EA65 3E 28 ld a,28h EA67 D3 31 out (31h),a EA69 26 80 ld h,80h EA6B F1 pop af EA6C E3 ex (sp),hl EA6D C9 ret ; EA6E disel: ; diselect text window EA6E E3 ex (sp),hl EA6F F5 push af EA70 DB 70 in a,(txtwin) EA72 84 add a,h EA73 D6 80 sub 80h EA75 67 ld h,a EA76 3E 2E ld a,2eh EA78 D3 31 out (31h),a EA7A F1 pop af EA7B E3 ex (sp),hl EA7C C9 ret ; EA7D xadd: ; convert address to text window EA7D F5 push af EA7E DB 70 in a,(txtwin) EA80 ED 44 neg EA82 82 add a,d EA83 C6 80 add a,80h EA85 57 ld d,a EA86 F1 pop af EA87 C9 ret ; ; EA88 hcls: EA88 11 0000 ld de,0 EA8B 21 C000 ld hl,vrmtop EA8E 0E 5D ld c,bank2 EA90 06 B8 ld b,nlines-hsize ; skip function keys EA92 CD EAA0 call eralin EA95 21 C000 ld hl,vrmtop EA98 0E 5C ld c,bank1 EA9A 06 C8 ld b,nlines EA9C CD EAA0 call eralin EA9F C9 ret ; EAA0 eralin: ; erase 1 dot line (80h bytes) EAA0 C5 push bc EAA1 E5 push hl EAA2 68 ld l,b EAA3 26 00 ld h,0 EAA5 29 add hl,hl EAA6 29 add hl,hl EAA7 29 add hl,hl EAA8 29 add hl,hl EAA9 E5 push hl EAAA C1 pop bc EAAB 29 add hl,hl EAAC 29 add hl,hl EAAD 09 add hl,bc EAAE C1 pop bc EAAF 09 add hl,bc EAB0 C1 pop bc EAB1 F3 di EAB2 CD E8F4 call flush EAB5 CD EA60 call sel EAB8 ED 79 out (c),a EABA DD 21 0000 ld ix,0 EABE DD 39 add ix,sp EAC0 F9 ld sp,hl EAC1 csloop: EAC1 D5 D5 D5 D5 db 0d5h,0d5h,0d5h,0d5h EAC5 D5 D5 D5 D5 db 0d5h,0d5h,0d5h,0d5h EAC9 D5 D5 D5 D5 db 0d5h,0d5h,0d5h,0d5h EACD D5 D5 D5 D5 db 0d5h,0d5h,0d5h,0d5h EAD1 D5 D5 D5 D5 db 0d5h,0d5h,0d5h,0d5h EAD5 D5 D5 D5 D5 db 0d5h,0d5h,0d5h,0d5h EAD9 D5 D5 D5 D5 db 0d5h,0d5h,0d5h,0d5h EADD D5 D5 D5 D5 db 0d5h,0d5h,0d5h,0d5h EAE1 D5 D5 D5 D5 db 0d5h,0d5h,0d5h,0d5h EAE5 D5 D5 D5 D5 db 0d5h,0d5h,0d5h,0d5h EAE9 10 D6 djnz csloop EAEB DD F9 ld sp,ix EAED D3 5F out (mainrm),a EAEF CD EA6E call disel EAF2 FB ei EAF3 C9 ret ; ; EAF4 knjfnt: ; read kanji font EAF4 CD E99B call knjadd EAF7 06 10 ld b,16 EAF9 11 EC35 ld de,buffer EAFC rfnt: EAFC 7D ld a,l EAFD D3 E8 out (0e8h),a EAFF 7C ld a,h EB00 D3 E9 out (0e9h),a EB02 23 inc hl EB03 D3 EA out (0eah),a EB05 DB E9 in a,(0e9h) EB07 12 ld (de),a EB08 13 inc de EB09 DB E8 in a,(0e8h) EB0B 12 ld (de),a EB0C 13 inc de EB0D D3 EB out (0ebh),a EB0F 10 EB djnz rfnt EB11 C9 ret ; EB12 ankfnt: ; read ank font EB12 C5 push bc EB13 E1 pop hl EB14 29 add hl,hl EB15 29 add hl,hl EB16 29 add hl,hl EB17 29 add hl,hl EB18 11 C000 ld de,font EB1B F3 di EB1C CD E8F4 call flush EB1F CD EA60 call sel EB22 19 add hl,de ; get font address EB23 11 EC35 ld de,buffer EB26 CD EA7D call xadd EB29 01 0010 ld bc,16 EB2C D3 5E out (bank3),a EB2E ED B0 ldir EB30 D3 5F out (mainrm),a EB32 CD EA6E call disel EB35 FB ei EB36 C9 ret ; ; EB37 putank: ; hl: address c: bank EB37 06 10 ld b,16 EB39 F3 di EB3A CD E8F4 call flush EB3D CD EA60 call sel EB40 11 EC35 ld de,buffer EB43 CD EA7D call xadd EB46 D5 push de EB47 DD E1 pop ix EB49 anklp: EB49 ED 79 out (c),a EB4B DD 7E 00 ld a,(ix) EB4E 77 ld (hl),a EB4F D3 5F out (mainrm),a EB51 DD 23 inc ix EB53 11 0050 ld de,lnsize EB56 19 add hl,de EB57 11 FE80 ld de,vrmtop+vrsize cphlde EB5A E5 + push hl EB5B B7 + or a EB5C ED 52 + sbc hl,de EB5E E1 + pop hl EB5F 38 05 jr c,nxt EB61 11 C180 ld de,nxbank EB64 19 add hl,de EB65 0C inc c EB66 nxt: EB66 10 E1 djnz anklp EB68 D3 5F out (mainrm),a EB6A CD EA6E call disel EB6D FB ei EB6E C9 ret ; ; EB6F putkan: ; put kanji EB6F 06 10 ld b,16 EB71 F3 di EB72 CD E8F4 call flush EB75 CD EA60 call sel EB78 11 EC35 ld de,buffer EB7B CD EA7D call xadd EB7E D5 push de EB7F DD E1 pop ix EB81 kanlp: EB81 ED 79 out (c),a EB83 DD 7E 00 ld a,(ix) EB86 DD 23 inc ix EB88 77 ld (hl),a EB89 23 inc hl EB8A DD 7E 00 ld a,(ix) EB8D DD 23 inc ix EB8F 77 ld (hl),a EB90 D3 5F out (mainrm),a EB92 11 004F ld de,lnsize-1 EB95 19 add hl,de EB96 11 FE80 ld de,vrmtop+vrsize cphlde EB99 E5 + push hl EB9A B7 + or a EB9B ED 52 + sbc hl,de EB9D E1 + pop hl EB9E 38 05 jr c,knxt EBA0 11 C180 ld de,nxbank EBA3 19 add hl,de EBA4 0C inc c EBA5 knxt: EBA5 10 DA djnz kanlp EBA7 D3 5F out (mainrm),a EBA9 CD EA6E call disel EBAC FB ei EBAD C9 ret ; ; EBAE roll: ; scroll up 1 line EBAE 21 C500 ld hl,vrmtop+scrbyt EBB1 11 C000 ld de,vrmtop EBB4 01 3980 ld bc,vrsize-scrbyt EBB7 CD E8E7 call waitvr EBBA F3 di EBBB CD E8F4 call flush EBBE CD EA60 call sel EBC1 D3 5C out (bank1),a EBC3 ED B0 ldir EBC5 D3 5F out (mainrm),a EBC7 CD EA6E call disel EBCA FB ei ; EBCB 01 0500 ld bc,scrbyt EBCE 21 C000 ld hl,vrmtop EBD1 11 F980 ld de,vrmtop+vrsize-scrbyt EBD4 scl1: EBD4 C5 push bc EBD5 CD E8E7 call waitvr EBD8 F3 di EBD9 CD E8F4 call flush EBDC CD EA60 call sel EBDF D5 push de EBE0 11 EC35 ld de,buffer EBE3 CD EA7D call xadd EBE6 01 0100 ld bc,100h EBE9 D3 5D out (bank2),a EBEB ED B0 ldir EBED D3 5F out (mainrm),a EBEF D1 pop de EBF0 E5 push hl EBF1 21 EC35 ld hl,buffer EBF4 EB ex de,hl EBF5 CD EA7D call xadd EBF8 EB ex de,hl EBF9 01 0100 ld bc,100h EBFC D3 5C out (bank1),a EBFE ED B0 ldir EC00 D3 5F out (mainrm),a EC02 E1 pop hl EC03 CD EA6E call disel EC06 FB ei EC07 C1 pop bc EC08 10 CA djnz scl1 ; EC0A 21 C500 ld hl,vrmtop+scrbyt EC0D 11 C000 ld de,vrmtop EC10 01 3480 ld bc,vrsize-2*scrbyt EC13 CD E8E7 call waitvr EC16 F3 di EC17 CD E8F4 call flush EC1A CD EA60 call sel EC1D D3 5D out (bank2),a EC1F ED B0 ldir EC21 D3 5F out (mainrm),a EC23 CD EA6E call disel EC26 FB ei ; EC27 21 F480 ld hl,vrmtop+vrsize-2*scrbyt EC2A 11 0000 ld de,0 EC2D 06 10 ld b,hsize EC2F 0E 5D ld c,bank2 EC31 CD EAA0 call eralin EC34 C9 ret ; ; work area and jump vectors ; EC35 buffer: ds 100h ; buffer for scroll and esc. sequence ED35 spsave: ds 2 ; old stack ED37 11 save40: db flash or pstb ; (port40) ED38 00 kanji1: db 0 ; shift JIS upper byte ED39 FF cmode: db 0ffh ; color mode or b/w mode ED3A 00 cattr: db 0 ; charactor attribute ED3B 00 literl: db 0 ; temporally literal flag ED3C 00 eline: db 0 ; line feed with erase line ED3D 00 esccnt: db 0 ED3E EC35 escptr: dw buffer ED40 0000 escpad: dw 0 ED42 ctltab: ;table of control charactors ctrl - ED42 E69F E69F dw c_null, c_null ; 00 01 @ A ED46 E69F E69F dw c_null, c_null ; 02 03 B C ED4A E69F E69F dw c_null, c_null ; 04 05 D E ED4E E69F E6A8 dw c_null, c_bell ; 06 07 F G ED52 E6C5 E6DE dw c_bs, c_tab ; 08 09 H I ED56 E6EC E69F dw c_lf, c_null ; 0A 0B J K ED5A E69F E714 dw c_null, c_ret ; 0C 0D L M ED5E E69F E69F dw c_null, c_null ; 0E 0F N O ED62 E69F E69F dw c_null, c_null ; 10 11 P Q ED66 E69F E69F dw c_null, c_null ; 12 13 R S ED6A E69F E69F dw c_null, c_null ; 14 15 T U ED6E E722 E72B dw c_fson, c_fsof ; 16 17 V W ED72 E69F E69F dw c_null, c_null ; 18 19 X Y ED76 E7EB E71C dw e_cls, c_esc ; 1A 1B Z [ ED7A E73A E734 dw c_eln, c_litr ; 1C 1D \ ] ED7E E70A E69F dw c_home, c_null ; 1E 1F ^ _ ED82 esctab: ; table of escape sequence ED82 2A 01 db '*',1 ; clear screen ED84 E7EB dw e_cls ED86 3D 03 db '=',3 ; direct cursor addressing ED88 E7F9 dw e_curs ED8A 54 01 db 'T',1 ; erase line ED8C E80B dw e_elin ED8E 28 01 db '(',1 ; reverse off ED90 E85A dw e_r_of ED92 29 01 db ')',1 ; reverse on ED94 E863 dw e_r_on ED96 5B 01 db '[',1 ; underline off ED98 E86C dw e_u_of ED9A 5D 01 db ']',1 ; underline on ED9C E875 dw e_u_on ED9E 7B 01 db '{',1 ; bold face off EDA0 E87E dw e_b_of EDA2 7D 01 db '}',1 ; bold face on EDA4 E887 dw e_b_on EDA6 56 FE db 'V',varlen ; console command? EDA8 E890 dw e_cons EDAA 43 02 db 'C',2 ; color command? EDAC E898 dw e_colr EDAE 00 00 db e_end,0 ; end mark of esc. sequence EDB0 E7E4 dw escret ; end