PROP-PRINT v.1.0 R.Koning 1989 ####################################### PREPARE TO PRINT. A holds the char., (61270) holds current-window no. 60936 D9 EXX 60937 D5 PUSH DE Save alternative registers 60938 E5 PUSH HL 60939 C5 PUSH BC 60940 D9 EXX 60941 CD1CEE CALL 60956 Move current window-info to pr.buffer 60944 CD60EF CALL 61280 The actual printroutine 60947 CD22EE CALL 60962 Store updated window-info in table 60950 D9 EXX 60951 C1 POP BC Restore alt. registers 60952 E1 POP HL 60953 D5 POP DE 60954 D9 EXX 60955 C9 RET FETCH WINDOWINFO 60956 CD29EE CALL 60969 Find current-window block 60959 EDB0 LDIR Move to printerbuffer 60961 C9 RET STORE WINDOWINFO 60962 CD29EE CALL 60969 Find current-window block 60965 EB EX DE,HL Switch pointers 60966 EDB0 LDIR Move info to table 60968 C9 RET FIND CURRENT-WINDOW-INFO 60969 F5 PUSH AF Save char.code 60970 3A56EF LD A,(61270) Get current-windowno. 60973 E60F AND 015 max. 15 60975 2148EE LD HL,61000 Point to tablestart 60978 17 RLA 60979 17 RLA Let a = a * 16, allowing 16 60980 17 RLA bytes in each block 60981 17 RLA 60982 1600 LD D,000 Move calculated value to DE 60984 5F LD E,A 60985 19 ADD HL,DE Point to current infoblock 60986 7E LD A,(HL) Test the first byte, 255= empty 60987 FEFF CP 255 Test for 'empty block' 60989 CA9F1E JP Z,07839 Jp if so: INT. OUT OF RANGE ERROR 60992 F1 POP AF Retrieve char.code 60993 011000 LD BC,00016 Blocklength 60996 11005B LD DE,23296 Point to printerbuffer 60999 C9 RET WINDOW-INFO TABLE (16 blocks, each of 16 bytes, the first byte indicates whether a block is empty or not.) empty=255 61000 Start of information for window 0 61016 - - - - - - - - window 1 61032 - - - - - - - - window 2 61048 - - - - - - - - window 3 61064 - - - - - - - - window 4 61080 - - - - - - - - window 5 61096 - - - - - - - - window 6 61112 - - - - - - - - window 7 61128 - - - - - - - - window 8 61144 - - - - - - - - window 9 61160 - - - - - - - - window 10 61176 - - - - - - - - window 11 61192 - - - - - - - - window 12 61208 - - - - - - - - window 13 61224 - - - - - - - - window 14 61240 - - - - - - - - window 15 61257 - 61269 spare 61270 Holds current windowno. 61271 Holds the result of MENUCHOICE (CHR$ 31) 61272 - 61279 spare The 'current-window-information'-block will be transferred to the printerbuffer as follows: Adress: 23296 - holds 'not empty'-no. not used here 23297 - not used 23298 - not used 23299 - not used 23300 - not used start+5 23301 - TOPLIN , topline of window (char's) +6 23302 - LEFTCOL , leftcolumn of window (char's) +7 23303 - XPOS , horizontal printposition (pixels) +8 23304 - YPOS , vertical printposition (pixels) +9 23305 - HEIGHT , height of window (char's) +10 23306 - WIDTH , width of window (char's) +11 23307 - CSIZE , width of character, max. 15(pixels) bits 6/7 used for flags +12 23308 - FONT , bits 6/7 : char.height, bit 5 : scroll-msgeflag, bits 0-4 : font +13 23309 - CFLAGS , various flags, normally zero +14 23310 - SCROLLCNT , scrollcounter 23311 - not used MAIN PRINT A-register holds the character, controlcode, or the parameter following a controlcode 61280 5F LD E,A Save the char or parameter 61281 21075B LD HL,23303 Make HL point to XPOS 61284 3A0D5B LD A,(23309) Get CFLAGS 61287 A7 AND A Test for any controlflag set 61288 280B JR Z,61301 Jp if not 61290 CB7F BIT 7,A 61292 204D JR NZ,61371 DO ATTR if bit 7 set 61294 CB77 BIT 6,A 61296 2021 JR NZ,61331 DO SCRN$ if bit 6 set 61298 C313F0 JP 61459 DO AT/TAB if any other bit set 61301 3A0B5B LD A,(23307) Get CSIZE 61304 E6C0 AND 192 Test for bit 6/7 61306 CA9FF0 JP Z,61599 Jp to TESTCHAR if not set 61309 17 RLA Rotate bit 7 into carry 61310 3807 JR C,61319 DO FONT if set, else continue in DO CSIZE DO CSIZE 61312 7B LD A,E Retrieve the parameter 61313 E60F AND 015 Keep only csize bits 61315 320B5B LD (23307),A Enter the new csize, resetting the 61318 C9 RET flag DO FONT 61319 210C5B LD HL,23308 Point to FONT 61322 7E LD A,(HL) 61323 E620 AND 032 Keep scroll-msge-flag 61325 B3 OR E Enter the parameter 61326 77 LD (HL),A in FONT 61327 2B DEC HL Point to CSIZE 61328 CBBE RES 7,(HL) Reset flag 61330 C9 RET DO SCRN$ (CFLAGS not only holds the flag, bit 6, but also the counter for 8 or 9 parameters to follow) 61331 3D DEC A Adjust counter 61332 320D5B LD (23309),A Move back in CFLAGS 61335 D640 SUB 064 Mask flagbit out 61337 2816 JR Z,61361 Jp if last parameter arrived 61339 FE08 CP 008 Test for 8 or less params to follow 61341 2005 JR NZ,61348 Jp if so 61343 7B LD A,E Fetch parameter, the first of 9 must 61344 328F5C LD (23695),A be the attribute, so store in ATTR-T 61347 C9 RET 61348 DD21995C LD IX,23705 Point to end of temporarily buffer 61352 DD2B DEC IX Find correct place 61354 3D DEC A (counter counts backwards!) 61355 20FB JR NZ,61352 61357 DD7300 LD (IX+000),E Store the parameter (= pattern) 61360 C9 RET 61361 DD21925C LD IX,23698 Point to start of temp.buffer 61365 DD7307 LD (IX+007),E Enter pattern on last position 61368 C3D9F0 JP 61657 Jp PRINT-A-CHAR DO ATTR (CFLAGS holds flagbit + controlcode 16-21) 61371 E607 AND 007 Reduce code to 0-5 61373 4F LD C,A Store temp. 61374 D604 SUB 004 Test for controls 20/21 61376 301D JR NC,61407 Jp if so, (Inverse/Over) 61378 0600 LD B,000 61380 21D7EF LD HL,61399 Point to TABLE 61383 09 ADD HL,BC 61384 46 LD B,(HL) Find entry 61385 7B LD A,E Retrieve parameter 61386 17 RLA Adjust bitpattern 61387 10FD DJNZ 61386 61389 110400 LD DE,00004 Find TABLE-entry 61392 19 ADD HL,DE 61393 46 LD B,(HL) 61394 218F5C LD HL,23695 Point to ATTR-T 61397 182B JR 61442 TABLE 61399 09 03 07 06 07 38 80 40 (hex) INVERSE/OVER 61407 3C INC A 61408 4F LD C,A 61409 FE01 CP 001 Test for control 20 (inverse) 61411 7B LD A,E Retrieve parameter 61412 2009 JR NZ,61423 Jp if not 'inverse' 61414 E67F AND 127 : 61416 BB CP E : 61417 2804 JR Z,61423 : Test parameter, 61419 FE3C CP 060 : not of any use in this version! 61421 3819 JR C,61448 : 61423 FE02 CP 002 Test parameter for < 2 61425 3013 JR NC,61446 Exit if not 61427 21915C LD HL,23697 Point to PFLAG 61430 79 LD A,C 61431 FE01 CP 001 Prepare PFLAG 61433 7B LD A,E 61434 0601 LD B,001 61436 2004 JR NZ,61442 61438 07 RLCA 61439 07 RLCA 61440 0604 LD B,004 61442 AE XOR (HL) Enter the correct value in PFLAG or 61443 A0 AND B ATTR-T 61444 AE XOR (HL) 61445 77 LD (HL),A 61446 1806 JR 61454 Reset CFLAGS EXTENDED INVERSE codes, not of use in this version! 61448 CD54F1 CALL 61780 Print '?' 61451 00 NOP 61452 00 NOP 61453 00 NOP 61454 AF XOR A Reset CFLAGS 61455 320D5B LD (23309),A 61458 C9 RET AT/TAB (both (!) use two parameters) CFLAGS : AT-line =4, AT-col =2 TAB 1st =3, TAB 2nd =1 61459 E603 AND 003 Reduce range 61461 2029 JR NZ,61504 Jp if not AT-line AT-LINE 61463 CD12F4 CALL 62482 Get character-height in B 61466 04 INC B Adjust range 61467 3A095B LD A,(23305) Get HEIGHT 61470 90 SUB B Calculate the number of lines 61471 0EFF LD C,255 in the window 61473 90 SUB B 61474 0C INC C 61475 30FC JR NC,61473 61477 79 LD A,C 61478 BB CP E Test for given line no. 61479 383C JR C,61541 Jp ERROR if not fitting inside win- 61481 AF XOR A Ld A,00 dow 61482 83 ADD A,E E = given line no. 61483 05 DEC B Calc. screen line no. 61484 20FC JR NZ,61482 61486 5F LD E,A Store temp. 61487 3A055B LD A,(23301) Get TOPLIN 61490 83 ADD A,E Add line no. 61491 87 ADD A,A Calculate pixelrow on screen 61492 87 ADD A,A 61493 87 ADD A,A 61494 ED44 NEG 175 - ( 8 * lineno.) 61496 C6AF ADD A,175 61498 23 INC HL Point to Y-POS 61499 77 LD (HL),A Store new printposition 61500 3E02 LD A,002 Signal 'column param. follows) 61502 185B JR 61595 Store in CFLAGS AT-COLUMN / TAB 61504 210D5B LD HL,23309 Point to CFLAGS 61507 35 DEC (HL) Adjust flag, test for 2nd. TABparam. 61508 C8 RET Z Return if so, dropping the param. 61509 35 DEC (HL) Adjust CFLAGS, set zeroflag if ATcol 61510 210A5B LD HL,23306 Point to WIDTH 61513 F5 PUSH AF Save the zeroflag 61514 AF XOR A 61515 BB CP E Test for AT-col =0 61516 2821 JR Z,61551 Jp if so, make no further tests 61518 3A0B5B LD A,(23307) Get CSIZE 61521 E60F AND 015 Keep only csize bits 61523 57 LD D,A Store csize 61524 1D DEC E Calculate AT-col * csize 61525 2805 JR Z,61532 61527 82 ADD A,D 61528 380B JR C,61541 Jp ERROR if out of screen 61530 18F8 JR 61524 61532 5F LD E,A Store col * csize 61533 7E LD A,(HL) Get WIDTH 61534 87 ADD A,A Calc pixel-width 61535 87 ADD A,A 61536 87 ADD A,A 61537 92 SUB D Sub csize 61538 BB CP E Test for fitting in window 61539 300A JR NC,61551 Jp if so 61541 AF XOR A Reset CFLAGS 61542 320D5B LD (23309),A 61545 CD22EE CALL 60962 Store window information in table 61548 CD9F1E CALL 07839 Jp ERROR 'Integer out of range' 61551 21065B LD HL,23302 Point to LEFTCOL 61554 7E LD A,(HL) Calc. leftcol pixelno. 61555 87 ADD A,A 61556 87 ADD A,A 61557 87 ADD A,A 61558 83 ADD A,E A = new xpos 61559 23 INC HL Point to XPOS 61560 57 LD D,A Save new xpos temp. 61561 F1 POP AF Retrieve zeroflag 61562 2002 JR NZ,61566 Jp if TAB 61564 72 LD (HL),D Enter new xpos in XPOS 61565 C9 RET TAB 61566 7A LD A,D Retrieve new xpos 61567 BE CP (HL) Test against current xpos 61568 C8 RET Z Make no changes if the same 61569 7B LD A,E Get 'AT-col * csize' 61570 A7 AND A Test for AT-col = 0 61571 2002 JR NZ,61575 Jp if not, 61573 3D DEC A else make new xpos =255, 61574 57 LD D,A signalling 'NEWLINE' 61575 7A LD A,D 61576 BE CP (HL) Test against current xpos 61577 280E JR Z,61593 Jp if the same, make no changes 61579 3005 JR NC,61586 Jp if before current xpos 61581 CD4FF1 CALL 61775 Print spaces, 61584 18F6 JR 61576 until new line is reached 61586 CD4FF1 CALL 61775 Print space 61589 BE CP (HL) Test current xpos against new xpos 61590 30FA JR NC,61586 Again, until newpos is reached 61592 72 LD (HL),D Enter exact new xpos in XPOS 61593 3E01 LD A,001 Signal 'a 2nd. TAB param follows', 61595 320D5B LD (23309),A in CFLAGS 61598 C9 RET TEST CHARACTER 61599 7B LD A,E Retrieve character 61600 FE20 CP 032 Test for controlcodes 61602 DA20F1 JP C,61728 Jp if so, to CONTROLS-I 61605 FE80 CP 128 Test for printable char's 61607 3830 JR C,61657 Jp if so, to PRINT-A-CHAR 61609 FE90 CP 144 Test for 'ad-hoc'GRAPHICS 61611 300A JR NC,61623 Jp if not 61613 47 LD B,A Fetch code in B 61614 CD380B CALL 02872 Construct graphic in MEMBOT 61617 DD21925C LD IX,23698 Point to MEMBOT 61621 181A JR 61649 61623 FEA5 CP 165 Test for UDG 61625 3806 JR C,61633 Jp if so 61627 D6A5 SUB 165 Must be a TOKEN now, reduce range 61629 CD100C CALL 03088 Expand token 61632 C9 RET 61633 D690 SUB 144 Reduce range for UDG's 61635 2600 LD H,000 61637 6F LD L,A Allow 8 patterns in table for each 61638 29 ADD HL,HL UDG 61639 29 ADD HL,HL 61640 29 ADD HL,HL 61641 ED5B7B5C LD DE,(23675) Get adress of UDG-table 61645 19 ADD HL,DE Find correct entry 61646 E5 PUSH HL 61647 DDE1 POP IX Make IX point to it 61649 21075B LD HL,23303 Point to XPOS 61652 3E40 LD A,064 Set flag, signalling 'no new 61654 320D5B LD (23309),A table-adress needed' PRINT-A-CHAR 61657 F5 PUSH AF Save char 61658 CDD8F2 CALL 62168 SCROLLTEST 61661 F1 POP AF Retrieve char 61662 213B5C LD HL,23611 : Test for 'leading spaces' 61665 CB86 RES 0,(HL) : when printing TOKENS 61667 FE20 CP 032 : 61669 2002 JR NZ,61673 : 61671 CBC6 SET 0,(HL) : 61673 210D5B LD HL,23309 Point to CfLAGS 61676 CB76 BIT 6,(HL) Test for 'existing chartable-adr.' 61678 3600 LD (HL),000 Reset flag anyway 61680 CC1BF4 CALL Z,62491 FIND CHAR-TABLE adress, if needed 61683 ED4B075B LD BC,(23303) Get XPOS, YPOS 61687 CDAA22 CALL 08874 Calc. screenadress 61690 CD47F4 CALL 62535 DO FONTS 61693 CDDDF4 CALL 62685 MOVE TO SCREEN 61696 CD12F4 CALL 62482 Fetch fontheight in B 61699 04 INC B Adjust 61700 C5 PUSH BC Save fontheight and screenadress 61701 E5 PUSH HL 61702 CDDB0B CALL 03035 Set attributes 61705 E1 POP HL Restore height and adress 61706 C1 POP BC 61707 05 DEC B Allow for fontheight times 61708 2805 JR Z,61715 61710 CDDDF3 CALL 62429 Calc. adress 8 pixels down on 61713 18F1 JR 61700 screen 61715 21075B LD HL,23303 Point to XPOS 61718 3A0B5B LD A,(23307) Get csize 61721 E60F AND 015 Keep only csize bits 61723 86 ADD A,(HL) Calc. new xpos 61724 DE00 SBC A,000 Correct any overflow 61726 77 LD (HL),A Enter new xpos in XPOS 61727 C9 RET SET CONTROLS I 61728 FE10 CP 016 Test for controlchars 0-15 61730 383C JR C,61792 Jp if so, to CONTROLS II 16732 FE16 CP 022 Test for 'AT' 61734 2819 JR Z,61761 Jp if so 61736 381F JR C,61769 Jp if INK - OVER 61738 FE17 CP 023 Test for 'TAB' 61740 2817 JR Z,61765 Jp if so 61742 C394F5 JP 62868 Jp for more testing 61745 00 NOP 61746 00 NOP ENTER (newline) 61747 3A075B LD A,(23303) Get XPOS 61750 FEFF CP 255 Test for 'new line flag' 61752 CCD8F2 CALL Z,62168 SCROLLTEST, if so 61755 3EFF LD A,255 Set 'newline flag' 61757 32075B LD (23303),A In XPOs 61760 C9 RET SET CFLAGS 61761 3E04 LD A,004 Signal 'AT' 61763 1806 JR 61771 61765 3E03 LD A,003 Signal 'TAB' 61767 1802 JR 61771 61769 C680 ADD A,128 Signal 'ATTR' 61771 320D5B LD (23309),A 61774 C9 RET PRINT SPACE or '?' 61775 F5 PUSH AF 61776 3E20 LD A,032 Space 61778 1803 JR 61783 61780 F5 PUSH AF 61781 3E3F LD A,063 '?' 61783 E5 PUSH HL 61784 D5 PUSH DE 61785 CD60EF CALL 61280 Print recursive !!!! 61788 D1 POP DE 61789 E1 POP HL 61790 F1 POP AF 61791 C9 RET SET CONTROLS II 61792 FE0D CP 013 Test for 'ENTER' 61794 28CF JR Z,61747 Jp if so 61796 30EE JR NC,61780 Jp PRINT '?' with codes 14/15 61798 E5 PUSH HL Save HL briefly 61799 2171F1 LD HL,61809 Point to offset-table 61802 1600 LD D,000 E also holds current charactercode 61804 19 ADD HL,DE Point to correct entry 61805 5E LD E,(HL) Fetch offset 61806 19 ADD HL,DE Calc. adress to jump to 61807 E3 EX (SP),HL Retrieve HL register 61808 C9 RET Jump indirect OFFSET-TABLE 61809 0D CHR$ 0 SCRN$ +13 = 61822 61810 0C 1 SCRN$ +12 = 61822 61811 0F 2 CSIZE +15 = 61826 61812 14 3 FONT +20 = 61832 61813 19 4 SCRLLoff +25 = 61838 61814 18 5 SCRLLon +24 = 61838 61815 27 6 PRNT, +39 = 61854 61816 C1 7 FRAME +193 = 62009 61817 36 8 CURSleft +54 = 61871 61818 36 9 right +54 = 61872 61819 8B 10 down +139 = 61958 61820 5C 11 up +92 = 61912 61821 B3 12 DELETE +179 = 62000 SET SCRN$ flag 61822 C648 ADD A,072 Set bit 5, add 8 (counter) 61824 18C9 JR 61771 in CFLAGS SET CSIZE flag 61826 210B5B LD HL,23307 Point to CSIZE 61829 CBF6 SET 6,(HL) 61831 C9 RET SET FONT flag 61832 210B5B LD HL,23307 Point to CSIZE 61835 CBFE SET 7,(HL) 61837 C9 RET SET/RES SCROLLmessage flag 61838 1F RRA Set carryflag when controlchar = 5 61839 210C5B LD HL,23308 Point to FONT 61842 CBAE RES 5,(HL) Signal 'scrollmessage on' 61844 D8 RET C Return when controlchar was 5 61845 CBEE SET 5,(HL) Signal 'message off' 61847 3A095B LD A,(23305) Get HEIGHT 61850 320E5B LD (23310),A Set SCROLLCNT = HEIGHT 61853 C9 RET PRINT comma 61854 2B DEC HL Point to LEFTCOL 61855 3A0A5B LD A,(23306) Get WIDTH 61858 86 ADD A,(HL) Calculate 8 * LEFTCOL + 4 * WIDTH 61859 86 ADD A,(HL) 61860 87 ADD A,A 61861 87 ADD A,A A = pixelcolumn halfway window 61862 23 INC HL Point to XPOS 61863 BE CP (HL) Test for 'halfway window' 61864 77 LD (HL),A Set new XPOS 61865 2801 JR Z,61868 Exit when xpos was halfway window 61867 D0 RET NC also when xpos was in 1st half, 61868 C3EDF2 JP 62189 else jump to SCROLLTEST II CURSOR left 61871 AF XOR A Set zeroflag CURSOR right 61872 F5 PUSH AF Save zeroflag 61873 3A0B5B LD A,(23307) Get CSIZE 61876 E60F AND 015 Keep only csize bits 61878 57 LD D,A 61879 3A065B LD A,(23302) Get LEFTCOL 61882 87 ADD A,A Calc. pixelcolumn 61883 87 ADD A,A 61884 87 ADD A,A 61885 5F LD E,A 61886 F1 POP AF Retrieve zeroflag 61887 3A075B LD A,(23303) Get XPOS 61890 202F JR NZ,61939 Jp if 'CURSOR right' 61892 92 SUB D Sub csize from xpos 61893 BB CP E Test against left pixelcolumn 61894 300C JR NC,61908 Jp to exit if sufficient room on 61896 CDD8F1 CALL 61912 CURSOR-UP line 61899 D8 RET C Return when 'cursor-up' was not 61900 3A0A5B LD A,(23306) Get WIDTH possible 61903 87 ADD A,A Calculate righthand-border 61904 87 ADD A,A of window 61905 87 ADD A,A =leftcol + width 61906 83 ADD A,E 61907 92 SUB D Point to last possible char. pos. 61908 32075B LD (23303),A Set XPOS 61911 C9 RET CURSOR up 61912 21085B LD HL,23304 Point to YPOS 61915 CD12F4 CALL 62482 Get FONTheight in B 61918 04 INC B Adjust height 61919 7E LD A,(HL) Get YPOS 61920 C608 ADD A,008 1 line down 61922 10FC DJNZ 61920 for FONTheight times 61924 4F LD C,A Save new ypos in C 61925 3A055B LD A,(23301) Get TOPLIN 61928 87 ADD A,A Calc top-pixelrow 61929 87 ADD A,A 61930 87 ADD A,A 61931 ED44 NEG = 175 - ( 8 * TOPLIN ) 61933 C6AF ADD A,175 61935 B9 CP C Test new ypos 61936 D8 RET C Return if not fitting in window 61937 71 LD (HL),C Enter new ypos into YPOS 61938 C9 RET CURSOR right 61939 82 ADD A,D Add csize to xpos 61940 4F LD C,A Save new xpos 61941 3A0A5B LD A,(23306) Get WIDTH 61944 87 ADD A,A 61945 87 ADD A,A Calc. last possible char.position 61946 87 ADD A,A on line inside window 61947 92 SUB D 61948 83 ADD A,E 61949 B9 CP C Test against new xpos 61950 79 LD A,C Retrieve new xpos 61951 3001 JR NC,61954 Exit when valid, storing new xpos 61953 7B LD A,E Get last possible on line, 61954 32075B LD (23303),A store this pos. in XPOS 61957 D0 RET NC Exit when new xpos was valid, else continue in CURSOR down CURSOR down 61958 CD12F4 CALL 62482 Get FONTheight in B 61961 04 INC B Adjust height 61962 3A055B LD A,(23301) Get TOPLIN 61965 3D DEC A : 61966 5F LD E,A : 61967 3A095B LD A,(23305) : HEIGHT 61970 83 ADD A,E :Calculate bottom pixelrow - 8 61971 87 ADD A,A : 61972 87 ADD A,A : 61973 87 ADD A,A : 61974 ED44 NEG : 61976 C6AF ADD A,175 : 61978 4F LD C,A Store in C 61979 C5 PUSH BC Save FONTheight and bottomrow 61980 3A085B LD A,(23304) Get YPOS 61983 D608 SUB 008 1 line down 61985 3801 JR C,61988 Jp if out of screen 61987 B9 CP C Test new ypos against bottomrow 61988 DC21F3 CALL C,62241 SCROLL if not inside window 61991 3803 JR C,61996 Jp if SCROLL has been called, 61993 32085B LD (23304),A else enter new ypos in YPOS 61996 C1 POP BC Retrieve FONTheight and bottomrow 61997 10EC DJNZ 61979 FONTheight times 1 line down 61999 C9 RET DELETE 62000 CDAFF1 CALL 61871 CURSOR-left 62003 CD4BF1 CALL 61771 PRINT space 62006 C3AFF1 JP 61871 CURSOR-left FRAME 62009 2A905C LD HL,(23696) Save MASK-T and PFLAG 62012 E5 PUSH HL 62013 21FF00 LD HL,00255 Signal OVER 1, INK 8, PAPER 8 62016 22905C LD (23696),HL 62019 2A7D5C LD HL,(23677) Save COORDS 62022 E5 PUSH HL 62023 CD84F2 CALL 62084 Calc toppixelrow and leftpixelcol. 62026 21095B LD HL,23305 Point to HEIGHT in DE 62029 7E LD A,(HL) 62030 87 ADD A,A Calc pixelheight 62031 87 ADD A,A 62032 87 ADD A,A 62033 B9 CP C Cp 175 62034 3801 JR C,62037 62036 79 LD A,C 62037 47 LD B,A B = max.175 62038 23 INC HL Point to WIDTH 62039 7E LD A,(HL) 62040 87 ADD A,A Calc pixelwidth 62041 87 ADD A,A 62042 87 ADD A,A 62043 DE00 SBC A,000 62045 4F LD C,A C = max.255 62046 EB EX DE,HL Move top/left to HL 62047 7C LD A,H Test toprow 62048 FEAF CP 175 62050 DC98F2 CALL C,62104 Plot & draw TOPline if inside 62053 7D LD A,L screen 62054 81 ADD A,C Leftcol + width in pixels 62055 DE00 SBC A,000 62057 FEFF CP 255 Test righthand border 62059 DCA4F2 CALL C,62116 Plot & draw RIGHThandline if in 62062 7C LD A,H screen 62063 90 SUB B Toprow - height in pixels = bottom 62064 CE00 ADC A,000 Avoid a negative result row 62066 67 LD H,A Enter new value in H register 62067 C4B1F2 CALL NZ,62129 Plot & draw BOTTOMline if inside 62070 7D LD A,L screen 62071 A7 AND A Test leftcol (pixels) 62072 C4BCF2 CALL NZ,62140 Plot & draw if inside screen-1 62075 E1 POP HL Retrieve MASK-T and PFLAG 62076 227D5C LD (23677),HL Restore old values 62079 E1 POP HL Retrieve COORDS 62080 22905C LD (23696),HL Restore old values 62083 C9 RET CALC. Toppixelrow and Leftpixelcolumn in DE 62084 21055B LD HL,23301 Point to TOPLIN 62087 0EAF LD C,175 Use C temporarily 62089 7E LD A,(HL) : 62090 87 ADD A,A : 62091 87 ADD A,A :Calc. 175 -(8 * TOPLIN) 62092 87 ADD A,A : 62093 ED44 NEG : 62095 81 ADD A,C : 62096 57 LD D,A Store in D 62097 23 INC HL Point to LeFTCOL 62098 7E LD A,(HL) : 62099 87 ADD A,A :Calc. 8 * LEFTCOL 62100 87 ADD A,A : 62101 87 ADD A,A : 62102 5F LD E,A Store in E 62103 C9 RET PLOT & DRAW topline 62104 110101 LD DE,00257 Set directions for drawing 62107 E5 PUSH HL Save window-coords 62108 24 INC H 1 pixel up 62109 7D LD A,L 62110 A7 AND A Test for leftcol = 0 62111 2801 JR Z,62114 Jp if so, else 62113 2D DEC L 1 pixel to the left 62114 1822 JR 62150 Act. plot & draw PLOT & DRAW righthandline 62116 1101FF LD DE,65281 Set directions for drawing 62119 E5 PUSH HL Save window-coords 62120 6F LD L,A A = leftcol + width in pixels 62121 7C LD A,H Toprow 62122 FEAF CP 175 Test against toprow of screen 62124 3001 JR NC,62127 Jp if so 62126 24 INC H 1 pixel up 62127 1810 JR 62145 Act. plot & draw PLOT & DRAW bottomline 62129 11FF01 LD DE,00511 Set directions for drawing 62132 E5 PUSH HL H = bottomrow now, L = leftcol 62133 7D LD A,L 62134 81 ADD A,C Calc righthandcolumn, 62135 DE00 SBC A,000 max. 255 62137 6F LD L,A 62138 180A JR 62150 Act. plot & draw PLOT & DRAW lefthandline 62140 110101 LD DE,00257 Set directions for drawing 62143 E5 PUSH HL Save HL as usual 62144 2D DEC L 1 pixel to the left PLOT L,H - DRAW C,B vertical line 62145 C5 PUSH BC Save DRAW parameters 62146 0E00 LD C,000 Signal 'vertical line' 62148 1803 JR 62153 PLOT L,H - DRAW C,B horizontal line 62150 C5 PUSH BC Save DRAW parameters 62151 0600 LD B,000 Signal 'horizontal line' 62153 C5 PUSH BC Save DRAW params briefly 62154 E5 PUSH HL Move PLOT parameters to BC 62155 C1 POP BC 62156 D5 PUSH DE Save 'directions' 62157 CDE522 CALL 08933 PLOT 62160 D1 POP DE Retrieve 'directions' 62161 C1 POP BC Retrieve DRAW params 62162 CDBA24 CALL 09402 DRAW 62165 C1 POP BC Restore DRAW params 62166 E1 POP HL Restore windowcoords 62167 C9 RET SCROLLTEST 62168 5E LD E,(HL) HL points to XPOS 62169 2B DEC HL Make HL point to LEFTCOL 62170 7E LD A,(HL) Get LEFTCOL 62171 210A5B LD HL,23306 Point to WIDTH 62174 86 ADD A,(HL) 62175 87 ADD A,A Let A = 8*(WIDTH+LEFTCOL) 62176 87 ADD A,A = last pix.pos. on righthand 62177 87 ADD A,A 62178 23 INC HL Point to CSIZE 62179 47 LD B,A Store righthand pixpos 62180 7E LD A,(HL) Get csize 62181 E60F AND 015 Keep only csize bits 62183 ED44 NEG 62185 80 ADD A,B Let A = B-A, last possible pos 62186 BB CP E Test against current xpos 62187 300C JR NC,62201 Jp if xpos > righthandpos. 62189 21065B LD HL,23302 Point to LEFTCOL 62192 7E LD A,(HL) 62193 87 ADD A,A Calculate leftpixelcolumn 62194 87 ADD A,A = start of line 62195 87 ADD A,A 62196 23 INC HL Point to XPOS 62197 77 LD (HL),A Set XPOS to start of line 62198 CD06F2 CALL 61958 CURSOR DOWN 62201 CD12F4 CALL 62482 Get fontheight in B 62204 C8 RET Z Exit if fontheight = 1 62205 3A095B LD A,(23305) Get HEIGHT 62208 4F LD C,A Store HEIGHT 62209 3D DEC A Allow a 'fair' comparison 62210 B8 CP B Test for fontheight > HEIGHT 62211 DC860C CALL C,03206 ERROR if so: OUT OF SCREEN 62214 C5 PUSH BC 62215 CD0AF2 CALL 61962 CURSOR DOWN, make room for new line 62218 C1 POP BC 62219 3009 JR NC,62230 Jp if no scroll was used 62221 79 LD A,C Retrieve HEIGHT, = max.scrollcount 62222 90 SUB B Subtract fontheight 62223 210E5B LD HL,23310 Point to SCROLLCOUNT 62226 BE CP (HL) Test for scrollmessage is used 62227 3001 JR NC,62230 jp if not 62229 77 LD (HL),A Adjust SCROLLCOUNT 62230 3A085B LD A,(23304) Get YPOS, points to bottomline now 62233 C608 ADD A,008 Move fontheight lines up 62235 10FC DJNZ 62233 (B = fontheight) 62237 32085B LD (23304),A Store correct YPOS, taking room 62240 C9 RET made for new line in account DO SCROLL 1 (print msge + wait for key) 62241 3A0C5B LD A,(23308) Get FONT 62244 CB6F BIT 5,A Test 'scrollmsge flag' 62246 204B JR NZ,62323 Jp if set 62248 210E5B LD HL,23310 Point to SCROLLCOUNT 62251 35 DEC (HL) Adjust counter 62252 2045 JR NZ,62323 Jp if not yet zero 62254 3A095B LD A,(23305) Get HEIGHT 62257 77 LD (HL),A Set new SCROLLCOUNT 62258 2A515C LD HL,(23633) 62261 E5 PUSH HL Store 'CURRENT CHANNEL' 62262 2A8F5C LD HL,(23695) 62265 E5 PUSH HL Store 'ATTR-T' and 'MASK-T' 62266 3A915C LD A,(23697) 62269 F5 PUSH AF Store 'PFLAG' 62270 3EFD LD A,253 Signal 'lower screen' 62272 CD0116 CALL 5633 Open channel K 72275 AF XOR A 72276 11F80C LD DE,03320 Point to message 0 62279 CD0A0C CALL 03082 Print 'SCROLL?' 62282 213B5C LD HL,23611 FLAGS 62285 CBDE SET 3,(HL) Signal L-mode 62287 CD75F5 CALL 62837 WAIT-KEY 62290 F5 PUSH AF Save keycode 62291 CD6E0D CALL 03438 Cls lower screen 62294 F1 POP AF Retrieve keycode 62295 FE20 CP 032 Test for 'SPACE' 62297 2804 JR Z,62303 Jp if so 62299 F620 OR 032 62301 FE6E CP 110 Test for 'N' or 'n' 62303 CAE7F3 JP Z,62439 Jp 'BREAK etc' if so 62306 3EFE LD A,254 Signal 'mainscreen' 62308 CD0116 CALL 05633 Open channel S 62311 F1 POP AF 62312 32915C LD (23697),A Restore 'PFLAG' 62315 E1 POP HL 62316 228F5C LD (23695),HL Restore 'ATTR-T' and 'MASK-T' 62319 E1 POP HL 62220 22515C LD (23633),HL Restore 'CURRENT CHANNEL' DO SCROLL 2 62323 2A095B LD HL,(23305) HEIGHT + WIDTH 62326 45 LD B,L B = HEIGHT 62327 4C LD C,H C = WIDTH 62328 2A055B LD HL,(23301) TOPLIN + LEFTCOL 62331 7D LD A,L A = TOPLIN 63332 5C LD E,H E = LEFTCOL 62333 CD9E0E CALL 03742 Find screenadress from line in A 62336 1600 LD D,000 62338 19 ADD HL,DE HL = topleft screenadress 62339 05 DEC B Test for HEIGHT =1 62340 282A JR Z,62384 Jp if so 62342 C5 PUSH BC 62343 0600 LD B,000 BC = WIDTH 62345 C5 PUSH BC 62346 E5 PUSH HL 62347 CDD1F3 CALL 62417 Find ATTRadress from screenadr. 62350 112000 LD DE,00032 number of chars on 1 line 62353 EB EX DE,HL DE = ATTRadress 62354 19 ADD HL,DE HL = ATTRadr. 1 line down 62355 EDB0 LDIR Move ATTR up, WIDTH times 62357 E1 POP HL 62358 C1 POP BC 62359 E5 PUSH HL Save screenadress 62360 CDDDF3 CALL 62429 8 pixels down in Hl 62363 D1 POP DE DE = 'old' screenadr. 62364 E5 PUSH HL 62365 3E08 LD A,008 Allow for 8 pixelrows 62367 E5 PUSH HL 62368 D5 PUSH DE 62369 C5 PUSH BC 62370 EDB0 LDIR Move patterns 1 line up 62372 C1 POP BC 62373 D1 POP DE 62374 E1 POP HL 62375 24 INC H Next pixelrow 62376 14 INC D Next pixelrow 62377 3D DEC A Counter 62378 20F3 JR NZ,62367 Loop 8 times 62380 E1 POP HL Retrieve screenadress 62381 C1 POP BC Retrieve WIDTH (in C) 62382 10D6 DJNZ 62342 Loop HEIGHT times CLS -1- LINE (on entry: C=WIDTH, HL=screenadress) 62384 0608 LD B,008 Counter for 8 pixelrows 62386 51 LD D,C D = WIDTH 62387 E5 PUSH HL 62388 D5 PUSH DE 62389 E5 PUSH HL 62390 3600 LD (HL),000 Reset all pixels in screenadr. 62392 23 INC HL Next screenadr. 62393 15 DEC D 62394 20FA JR NZ,62390 Loop WIDTH times 62396 E1 POP HL Retrieve start-screenadr. 62397 24 INC H 1 pixelrow down 62398 D1 POP DE 62399 10F3 DJNZ 62380 Loop 8 times 62401 E1 POP HL Retrieve start-screenadr. 62402 E5 PUSH HL 62403 CDD1F3 CALL 62417 Find adress of ATTR in HL 62406 3A045B LD A,(23693) 'ATTR-P' 62409 77 LD (HL),A Set ATTR 62410 23 INC HL 62411 15 DEC D Counter 62412 20FB JR NZ,62409 Loop WIDTH times 62414 E1 POP HL Retrieve screenadress 62415 37 SCF Signal 'screen has scrolled' 62416 C9 RET FIND ATTR-ADRESS FROM SCREENADRESS 62417 7C LD A,H 62418 1F RRA 62419 1F RRA 62420 E606 AND 006 62422 F6B0 OR 176 62424 CB14 RL H 62426 1F RRA 62427 67 LD H,A 62428 C9 RET 8 PIXELS DOWN 62429 7D LD A,L HL = screenadress 62430 C620 ADD A,032 62432 6F LD L,A 62433 D0 RET NC 62434 7C LD A,H 62435 C608 ADD A,008 62437 67 LD H,A 62438 C9 RET SCROLL-EXIT 'N' or 'SPACE' has been pressed 62439 CD189E CALL 61747 Do 'ENTER' 62442 CD47D2 CALL 60962 Store windowinfo in table 62445 CD000D CALL 03328 Jp to 'BREAK, CONT. repeats' CLS WINDOW 62448 3E01 LD A,001 Startvalue 62450 320E5B LD (23310),A for SCROLLCOUNT 62453 CD84F2 CALL 62084 Get topleft pixelcoords in DE 62456 ED53075B LD (23303),DE Set XPOS and YPOS 62460 2A095B LD HL,(23305) HEIGHT + WIDTH 62463 5D LD E,L E = HEIGHT 62464 D5 PUSH DE 62465 0601 LD B,001 Signal '1 line' 62467 CD77F3 CALL 62327 Cls top line of window 62470 D1 POP DE Retrieve counter 62471 1D DEC E Loop HEIGHT times 62472 C8 RET Z Exit from here if ready 62473 D5 PUSH DE Store counter 62474 CDDDF3 CALL 62429 Find screenadress 8 pix. down 62477 CDB0F3 CALL 62384 Cls 1 line 62480 18F4 JR 62470 Loop GET FONTHEIGHT IN B (Actually this is fontheight -1) 62482 3A0C5B LD A,(23308) FONT 62485 E6C0 AND 192 Keep only fontheight-bits 62487 07 RLCA 62488 07 RLCA Make range 0-3 62489 47 LD B,A Store in B 62490 C9 RET FIND CHARACTERTABLE 62491 D620 SUB 032 Reduce char.code to 0-96 62493 2600 LD H,000 62495 6F LD L,A Store in HL 62496 29 ADD HL,HL 62497 29 ADD HL,HL Let code =code * 8, allowing 62498 29 ADD HL,HL 8 patterns for each character 62499 3A0B5B LD A,(23307) Get CSIZE 62502 E60F AND 015 Keep only csize bits 62504 ED5B365C LD DE,(23606) 'CHARS' 62508 14 INC D Point to chartable of SPECTRUM 62509 FE07 CP 007 Test for csize = 7 or 8 62511 3011 JR NC,62530 Jp if so 62513 1118F6 LD DE,63000 Point to new chartable (4pix) 62516 FE05 CP 005 Test for csize = 3 or 4 62518 380A JR C,62530 Jp if so 62520 14 INC D 62521 14 INC D 62522 14 INC D Point to 63768 (table 5pix) 62523 FE06 CP 006 Test for csize = 5 62525 3803 JR C,62530 Jp if so 62527 14 INC D 62528 14 INC D 62529 14 INC D Point to 64536 (table 6pix) 62530 19 ADD HL,DE Point to correct char.pattern 62531 E5 PUSH HL 62532 DDE1 POP IX Move pointer to IX 62534 C9 RET DO FONT 62535 3A0C5B LD A,(23308) Get FONT 62538 E61F AND 031 Test for any fontbit set 62540 C8 RET Z Ready if not 62541 DDE5 PUSH IX Make HL = chartable pointer, 62543 E3 EX (SP),HL storing screenadress 62544 11105B LD DE,23312 Point to pr.buffer 62547 D5 PUSH DE 62548 DDE1 POP IX IX also points to this adress 62550 010800 LD BC,00008 Move 8 patterns 62553 EDB0 LDIR from chartable to prbuff. 62555 CB2F SRA A Test FONT bit 0 62557 3016 JR NC,62581 Jp if not set 62559 21105B LD HL,23312 62562 CB2E SRA (HL) 62564 23 INC HL 62565 CB2E SRA (HL) 62567 23 INC HL 62568 CB2E SRA (HL) Process 8 patterns 62570 23 INC HL for 62571 23 INC HL Right italics 62572 23 INC HL 62573 CB26 SLA (HL) 62575 23 INC HL 62576 CB26 SLA (HL) 62578 23 INC HL 62579 CB26 SLA (HL) 62581 CB2F SRA A ;Test FONT bit 1 62583 300F JR NC,62600 ;Jp if not set 62585 21105B LD HL,23312 62588 F5 PUSH AF 62589 0608 LD B,008 62591 7E LD A,(HL) ; Process 8 patterns 62592 CB2F SRA A ; for 62594 B6 OR (HL) ; Thick 62595 77 LD (HL),A 62596 23 INC HL 62597 10F8 DJNZ 62591 62599 F1 POP AF 62600 CB2F SRA A ;Test FONT bit 2 62602 301C JR NC,62632 ;Jp if not set 62604 21105B LD HL,23312 62607 F5 PUSH AF 62608 0608 LD B,008 62610 7E LD A,(HL) 62611 CB2F SRA A 62613 B6 OR (HL) 62614 77 LD (HL),A 62615 23 INC HL ; Process 8 patterns 62616 10F8 DJ NZ,62610 62618 21105B LD HL,23312 ; for 62621 0607 LD B,007 62623 23 INC HL ; Bold 62624 7E LD A,(HL) 62625 2B DEC HL 62626 B6 OR (HL) 62627 77 LD (HL),A 62628 23 INC HL 62629 10F8 DJ NZ,62623 62631 F1 POP AF 62632 CB2F SRA A ;Test FONT bit 3 62634 3015 JR NC,62657 ;Jp if not set 62636 21105B LD HL,23312 62639 F5 PUSH AF 62640 0608 LD B,008 62642 7E LD A,(HL) 62643 4F LD C,A ; Process 8 patterns 62644 7E LD A,(HL) ; for 62645 CB27 SLA A ; shadowed 62647 77 LD (HL),A 62648 79 LD A,C 62649 CB2F SRA A 62651 B6 OR (HL) 62652 77 LD (HL),A 62653 23 INC HL 62654 10F2 DJNZ 62642 62656 F1 POP AF 62657 CB2F SRA A ;Test FONT bit 4 62659 3016 JR NC,62683 ;Jp if not set 62661 21105B LD HL,23312 62664 CB26 SLA (HL) 62666 23 INC HL 62667 CB26 SLA (HL) 62669 23 INC HL 62670 CB26 SLA (HL) : Process 8 patterns 62672 23 INC HL : for 62673 23 INC HL : left italics 62674 23 INC HL 62675 CB2E SRA (HL) 62677 23 INC HL 62678 CB2E SRA (HL) 62680 23 INC HL 62681 CB2E SRA (HL) 62683 E1 POP HL ;Retrieve screenadress 62684 C9 RET MOVE PATTERN TO SCREEN 62685 E5 PUSH HL ;Save screenadress 62686 3A915C LD A,(23697) ;Get 'P FLAG' 62689 06FF LD B,255 ;Prepare the OVER-mask in B 62691 1F RRA ; and the INVERSE-mask in A 62692 3801 JR C,62695 62694 04 INC B 62695 1F RRA 62696 1F RRA 62697 F5 PUSH AF ;Save carryflag 62698 3A0B5B LD A,(23307) ;Get CSIZE 62701 E60F AND 015 ;Keep only csize bits 62703 0E80 LD C,128 ;Prepare a mask in C 62705 3D DEC A 62706 CB29 SRA C 62708 3D DEC A 62709 20FB JR NZ,62706 62711 79 LD A,C 62712 320F5B LD (23311),A ;Store this mask temp. in prbuff. 62715 EEFF XOR 255 ;Prepare a mask in D' 62717 D9 EXX 62718 57 LD D,A 62719 1EFF LD E,255 62721 3A075B LD A,(23303) ;Get XPOS 62724 E607 AND 007 62726 2808 JR Z,62736 ;Prepare a mask in E' 62728 37 SCF 62729 CB1A RR D 62731 CB1B RR E 62733 3D DEC A 62734 20F8 JR NZ,62728 62736 D9 EXX 62737 F1 POP AF ;Retrieve carryflag 62738 3802 JR C,62742 62740 0E00 LD C,000 ;Delete mask in C 62742 3E08 LD A,008 ;Signal 8 patterns to come 62744 F5 PUSH AF ;Store counter 62745 3A0B5B LD A,(23307) ;Get CSIZE 62748 E60B AND 011 ;Mask out csize 3 and 7 62750 FE03 CP 003 62752 DD5600 LD D,(IX+000) ;Fetch pattern from table 62755 2002 JR NZ,62759 ;Jp if not csize 3 or 7 62757 CB22 SLA D ;Shift pattern 1 bit to the left 62759 3A0F5B LD A,(23311) ;Retrieve mask 62762 A2 AND D ;Keep only 'csize' bits in pattern 62763 A9 XOR C ;Consider InVERSE-mask 62764 57 LD D,A ;Store pattern in D 62765 1E00 LD E,000 62767 3A075B LD A,(23303) ;Get XPOS 62770 E607 AND 007 ;Test for 1st of full character 62772 2807 JR Z,62781 ;Jp if so position 62774 CB3A SRL D ;Prepare pattern in D+E 62776 CB1B RR E 62778 3D DEC A 62779 20F9 JR NZ,62774 62781 3A0C5B LD A,(23308) Get FONT 62784 E6C0 AND 192 Keep only fontheight bits 62786 07 RLCA 62787 07 RLCA 62788 3C INC A Make range 1-4 62789 F5 PUSH AF Store fontheight 62790 D9 EXX 62791 7A LD A,D Use mask in D' 62792 D9 EXX 62793 A6 AND (HL) HL = screenadress 62794 77 LD (HL),A 62795 7A LD A,D Get pattern in D 62796 A0 AND B Use mask in B 62797 2004 JR NZ,62803 62799 B2 OR D 62800 B6 OR (HL) Move to screenadress 62801 3600 LD (HL),000 62803 AE XOR (HL) 62804 77 LD (HL),A 62805 23 INC HL Point to next screenadr. 62806 D9 EXX 62807 7B LD A,E Use mask in E' 62808 D9 EXX 62809 A6 AND (HL) HL = next screenadress 62810 77 LD (HL),A 62811 7B LD A,E Get pattern in E 62812 A0 AND B Use mask in B 62813 2004 JR NZ,62819 62815 B3 OR E 62816 B6 OR (HL) Move to screenadress 62817 3600 LD (HL),000 62819 AE XOR (HL) 62820 77 LD (HL),A 62821 2B DEC HL Restore first screenadress 62822 CD83F5 CALL 62851 Calculate 1 pixelrow down 62825 F1 POP AF Retrieve fontheight 62826 3D DEC A Counter 62827 20D8 JR NZ,62789 Use the same pattern fonth. times 62829 DD23 INC IX Point to next pattern in table 62831 F1 POP AF Retrieve counter 62832 3D DEC A 62833 20A5 JR NZ,62744 Loop 8 times 62835 E1 POP HL Retrieve screenadress 62836 C9 RET WAIT FOR KEYPRESS 62837 FDCB01AE RES 5,(IY+001) 23612='FLAGS', signal 'no key' 62841 FDCB016E BIT 5,(IY+001) Test for key pressed 62845 28FA JR Z,62841 Loop if not 62847 3A085C LD A,(23560) Get keycode 62850 C9 RET CALCULATE 1 PIXELROW DOWN 62851 24 INC H HL = screenadress 62852 7C LD A,H 62853 E607 AND 007 62855 200A JR NZ,62867 62857 7D LD A,L 62858 C620 ADD A,032 62860 6F LD L,A 62861 3804 JR C,62867 62863 7C LD A,H 62864 D608 SUB 008 62866 67 LD H,A 62867 C9 RET TEST MORE CONTROLcodes 62868 FE1E CP 030 Test for CHR$ 30 = CLS WINDOW 62870 CAF0F3 JP Z,62448 Jp if so 62873 FE1F CP 031 Test for CHR$ 31 = MENUchoice 62875 C254F1 JP NZ,61780 Jp if not, print '?' MENU-CHOICE 62878 2A055B LD HL,(23301) TOPLIN + LEFTCOL 62881 45 LD B,L B = TOPLIN 62882 4C LD C,H C = LEFTCOL 62883 ED5B095B LD DE,(23305) E = HEIGHT, D = WIDTH 62887 05 DEC B Adjust topline 62888 3E01 LD A,001 Signal 1st line of window 62890 F5 PUSH AF Save this choice 62891 80 ADD A,B Current screenline in A 62892 CDF5F5 CALL 62965 Find ATTRadress from A + C 62895 D5 PUSH DE 62896 7E LD A,(HL) Get ATTR value 62897 EE10 XOR 016 Change papercolour 62899 77 LD (HL),A Set new ATTR 62900 23 INC HL Next screenposition 62901 15 DEC D D = WIDTH 62902 20F8 JR NZ,62896 Loop WIDTH times 62904 D1 POP DE 62905 CD75F5 CALL 62837 Wait for key 62908 F5 PUSH AF Store keycode 62909 D9 EXX Save all registers 62910 CD06F6 CALL 62982 Give keyboard-click 62913 D9 EXX Retrieve registers 62914 F1 POP AF Retrieve keycode 62915 D60A SUB 010 Prepare testing cursorkeys 62917 2009 JR NZ,62928 Jp if not 'cursor down' 62919 F1 POP AF Retrieve current choice 62920 BB CP E Test against HEIGHT 62921 3C INC A Adjust choice, 1 line down 62922 380C JR C,62936 Jp if still inside window 62924 3E01 LD A,001 Else signal 'topline' 62926 1808 JR 62936 62928 3D DEC A Test for 'cursor up' 62929 2013 JR NZ,62950 Jp if not 62931 F1 POP AF Retrieve current choice 62932 3D DEC A Adjust choice, 1 line up 62933 2001 JR NZ,62936 Jp still inside window 62935 7B LD A,E Else signal 'bottomline'(=HEIGHT) 62936 F5 PUSH AF Store choice (= lineno.) 62937 D5 PUSH DE 62938 2B DEC HL HL points to last xorred adress 62939 7E LD A,(HL) Get ATTR value 62940 EE10 XOR 016 Restore to old papercolour 62942 77 LD (HL),A Set ATTR 62943 15 DEC D Counter 62944 20F8 JR NZ,62938 Loop WIDTH times 62946 D1 POP DE Restore HEIGHT and WIdTH 62947 F1 POP AF Restore choice 62948 18C4 JR 62890 Loop 62950 3D DEC A Test keycode for 'DELETE' 62951 2004 JR NZ,62957 Jp if not 62953 F1 POP AF Balance the stack 62954 AF XOR A Set choice to 0 62955 1804 JR 62961 Exit 62957 3D DEC A Test keycode for 'ENTER' 62958 20C9 JR NZ,62905 If not: loop, ignoring key 62960 F1 POP AF Retrieve choice 62961 3257EF LD (61271),A Store choice 62964 C9 RET ;FIND ATTR-ADRESS FROM LINE + COLUMNno's (in A and C) 62965 6F LD L,A Move lineno. to HL 62966 AF XOR A 62967 67 LD H,A 62968 29 ADD HL,HL * 32 62969 29 ADD HL,HL 62970 29 ADD HL,HL 62971 29 ADD HL,HL 62972 29 ADD HL,HL 62973 C5 PUSH BC Store BC 62974 47 LD B,A B = A = 0 62975 09 ADD HL,BC ;Add columnno. 62976 010058 LD BC,22528 ;Start off ATTRfile 62979 09 ADD HL,BC ;Point to correct adress 62980 C1 POP BC ;Restore BC 62981 C9 RET ;KEYBOARD CLICK 62982 21C800 LD HL,00200 Set pitch 62985 54 LD D,H D = H = 0 62986 FD5EFF LD E,(IY-001) Get duration from 'PIP' 23609 62989 CDB503 CALL 00949 BEEPER 62992 C9 RET 62993 00 NOP ----- Spare 62999 00 NOP CHARSET 3 & 4 PIXELS format: 0XXX0000 (bytes in HEX) 63000 32 SPACE 00 00 00 00 00 00 00 00 63008 33 ! 00 20 20 20 20 00 20 00 63016 34 " 00 50 50 00 00 00 00 00 63024 35 # 00 50 70 50 50 70 50 00 63032 36 $ 00 20 70 60 70 30 70 20 63040 37 % 00 40 50 20 40 10 10 00 63048 38 & 00 10 20 10 20 40 30 00 63056 39 ' 00 20 40 00 00 00 00 00 63064 40 ( 00 20 40 40 40 40 20 00 63072 41 ) 00 40 20 20 20 20 40 00 63080 42 * 00 00 50 20 70 20 50 00 63088 43 + 00 00 20 20 70 20 20 00 63096 44 , 00 00 00 00 00 20 20 40 63104 45 - 00 00 00 00 70 00 00 00 63112 46 . 00 00 00 00 00 60 60 00 63120 47 / 00 00 00 10 20 40 00 00 63128 48 0 00 20 70 50 50 50 20 00 63136 49 1 00 20 60 20 20 20 70 00 63144 50 2 00 20 50 10 20 40 70 00 63152 51 3 00 60 10 20 10 10 60 00 63160 52 4 00 10 10 30 50 70 10 00 63168 53 5 00 70 40 60 10 50 20 00 63176 54 6 00 20 40 60 50 50 20 00 63184 55 7 00 70 10 10 20 40 40 00 63192 56 8 00 20 50 20 50 50 20 00 63200 57 9 00 20 50 50 30 10 20 00 63208 58 : 00 00 00 20 00 00 20 00 63216 59 ; 00 00 20 00 00 20 20 40 63224 60 < 00 00 10 20 40 20 10 00 63232 61 = 00 00 00 70 00 70 00 00 63240 62 < 00 00 40 20 10 20 40 00 63248 63 ? 00 60 10 20 40 00 40 00 63256 64 @ 00 20 50 70 70 40 20 00 63264 65 A 00 20 50 50 70 50 50 00 63272 66 B 00 60 50 60 50 50 60 00 63280 67 C 00 20 50 40 40 50 20 00 63288 68 D 00 60 50 50 50 50 60 00 63296 69 E 00 70 40 60 40 40 70 00 63304 70 F 00 70 40 60 40 40 40 00 63312 71 G 00 20 50 40 70 50 20 00 63320 72 H 00 50 50 70 50 50 50 00 63328 73 I 00 70 20 20 20 20 70 00 63336 74 J 00 10 10 10 50 50 20 00 63344 75 K 00 50 60 60 60 50 50 00 63352 76 L 00 40 40 40 40 40 70 00 63360 77 M 00 50 70 50 50 50 50 00 63368 78 N 00 60 50 50 50 50 50 00 63376 79 O 00 20 50 50 50 50 20 00 63384 80 P 00 60 50 50 60 40 40 00 63392 81 Q 00 20 50 50 50 70 30 00 63400 82 R 00 60 50 50 60 60 50 00 63408 83 S 00 20 40 20 10 50 20 00 63416 84 T 00 70 20 20 20 20 20 00 63424 85 U 00 50 50 50 50 50 20 00 63432 86 V 00 50 50 50 50 20 20 00 63440 87 W 00 50 50 50 50 70 20 00 63448 88 X 00 50 50 20 20 50 50 00 63456 89 Y 00 50 50 20 20 20 20 00 63464 90 Z 00 70 10 20 40 50 70 00 63472 91 [ 00 70 40 40 40 40 70 00 63480 92 \ 00 00 00 40 20 10 00 00 63488 93 ] 00 70 10 10 10 10 70 00 63496 94 ^ 00 20 70 20 20 20 20 00 63504 95 - 00 00 00 00 00 00 00 F0 63512 96 ` 00 30 40 60 40 40 70 00 63520 97 a 00 00 20 10 30 50 30 00 63528 98 b 00 40 40 60 50 50 60 00 63536 99 c 00 00 30 40 40 40 30 00 63544 100 d 00 10 10 30 50 50 30 00 63552 101 e 00 00 20 50 60 40 30 00 63560 102 f 00 30 40 60 40 40 40 00 63568 103 g 00 00 30 50 50 30 10 20 63576 104 h 00 40 40 60 50 50 50 00 63584 105 i 00 20 00 60 20 20 70 00 63592 106 j 00 10 00 10 10 10 50 20 63600 107 k 00 40 50 60 60 50 50 00 63608 108 l 00 40 40 40 40 40 30 00 63616 109 m 00 00 50 70 50 50 50 00 63624 110 n 00 00 60 50 50 50 50 00 63632 111 0 00 00 20 50 50 50 20 00 63640 112 p 00 00 60 50 50 60 40 40 63648 113 q 00 00 30 50 50 30 10 10 63656 114 r 00 00 30 40 40 40 40 00 63664 115 s 00 00 30 40 20 10 60 00 63672 116 t 00 20 70 20 20 20 10 00 63680 117 u 00 00 50 50 50 50 30 00 63688 118 v 00 00 50 50 50 60 20 00 63696 119 w 00 00 50 50 50 70 20 00 63704 120 x 00 00 50 20 20 20 50 00 63712 121 y 00 00 50 50 50 30 10 20 63720 122 z 00 00 70 10 20 40 70 00 63728 123 { 00 30 20 40 20 20 30 00 63736 124 | 00 20 20 20 20 20 20 00 63744 125 } 00 60 20 10 20 20 60 00 63752 126 ~ 00 50 20 00 00 00 00 00 63760 127  00 50 80 A0 A0 80 50 20 CHARSET 5 pixels format: 0XXXX000 bytes in HEX 63768 32 SPACE 00 00 00 00 00 00 00 00 63776 33 ! 00 20 20 20 20 00 20 00 63784 34 " 00 50 50 00 00 00 00 00 63792 35 # 00 50 F8 50 50 F8 50 00 63800 36 $ 00 10 38 50 30 28 70 20 63808 37 % 00 80 90 20 40 90 10 00 83816 38 & 00 20 50 20 58 80 78 00 63824 39 ' 00 20 40 00 00 00 00 00 63832 40 ( 00 10 20 20 20 20 10 00 63840 41 ) 00 40 20 20 20 20 40 00 63848 42 * 00 00 50 20 F8 20 50 00 63856 43 + 00 00 20 20 F8 20 20 00 63864 44 , 00 00 00 00 00 20 20 40 63872 45 - 00 00 00 00 78 00 00 00 63880 46 . 00 00 00 00 00 60 60 00 63888 47 / 00 00 08 10 20 40 00 00 63896 48 0 00 30 48 58 68 48 30 00 63904 49 1 00 10 30 10 10 10 38 00 63912 50 2 00 30 48 08 30 40 78 00 63920 51 3 00 30 48 10 08 48 30 00 63928 52 4 00 08 18 28 48 78 08 00 63936 53 5 00 78 40 70 08 48 30 00 63944 54 6 00 30 40 70 48 48 30 00 63952 55 7 00 78 08 10 20 40 40 00 63960 56 8 00 30 48 30 48 48 30 00 63968 57 9 00 30 48 48 38 08 30 00 63976 58 : 00 00 00 20 00 00 20 00 63984 59 ; 00 00 20 00 00 20 20 40 63992 60 < 00 00 10 20 40 20 10 00 64000 61 = 00 00 00 78 00 78 00 00 64008 62 > 00 00 40 20 10 20 40 00 64016 63 ? 00 30 48 10 20 00 20 00 64024 64 @ 00 70 88 B8 B8 80 70 00 64032 65 A 00 30 48 48 78 48 48 00 64040 66 B 00 70 48 70 48 48 70 00 64048 67 C 00 30 48 40 40 48 30 00 64056 68 D 00 60 50 48 48 50 60 00 64064 69 E 00 78 40 70 40 40 78 00 64072 70 F 00 78 40 70 40 40 40 00 64080 71 G 00 30 48 40 58 48 30 00 64088 72 H 00 48 48 78 48 48 48 00 64096 73 I 00 70 20 20 20 20 70 00 64104 74 J 00 08 08 08 48 48 30 00 64112 75 K 00 50 60 40 60 50 48 00 64120 76 L 00 40 40 40 40 40 78 00 64128 77 M 00 88 D8 A8 88 88 88 00 64136 78 N 00 48 48 68 58 48 48 00 64144 79 O 00 30 48 48 48 48 30 00 64152 80 P 00 70 48 48 70 40 40 00 64160 81 Q 00 30 48 48 68 58 30 00 64168 82 R 00 70 48 48 70 50 48 00 64176 83 S 00 30 40 30 08 48 30 00 64184 84 T 00 F8 20 20 20 20 20 00 64192 85 U 00 48 48 48 48 48 30 00 64200 86 V 00 88 88 88 88 50 20 00 64208 87 W 00 88 88 88 88 A8 50 00 64216 88 X 00 88 50 20 20 50 88 00 64224 89 Y 00 88 50 20 20 20 20 00 64232 90 Z 00 78 08 10 20 40 78 00 64240 91 [ 00 70 40 40 40 40 70 00 64248 92 \ 00 00 80 40 20 10 08 00 64256 93 ] 00 70 10 10 10 10 70 00 64264 94 ^ 00 20 70 A8 20 20 20 00 64272 95 _ 00 00 00 00 00 00 00 F8 64280 96 ` 00 30 48 60 40 40 78 00 64288 97 a 00 00 30 08 38 48 38 00 64296 98 b 00 40 40 70 48 48 70 00 64304 99 c 00 00 38 40 40 40 38 00 64312 100 d 00 08 08 38 48 48 38 00 64320 101 e 00 00 30 48 70 40 38 00 64328 102 f 00 18 20 30 20 20 20 00 64336 103 g 00 00 38 48 48 38 08 30 64344 104 h 00 40 40 70 48 48 48 00 64352 105 i 00 20 00 60 20 20 70 00 64360 106 j 00 08 00 08 08 08 48 30 64368 107 k 00 40 50 60 60 50 48 00 64376 108 l 00 20 20 20 20 20 18 00 64384 109 m 00 00 D0 A8 A8 A8 A8 00 64392 110 n 00 00 70 48 48 48 48 00 64400 111 o 00 00 30 48 48 48 30 00 64408 112 p 00 00 70 48 48 70 40 40 64416 113 q 00 00 30 50 50 30 10 18 64424 114 r 00 00 38 40 40 40 40 00 64432 115 s 00 00 30 40 30 08 70 00 64440 116 t 00 20 70 20 20 20 18 00 64448 117 u 00 00 48 48 48 48 30 00 64456 118 v 00 00 88 88 50 50 20 00 64464 119 w 00 00 88 A8 A8 A8 50 00 64472 120 x 00 00 88 50 20 50 88 00 64480 121 y 00 00 48 48 48 38 08 30 64488 122 z 00 00 78 10 20 40 78 00 64496 123 { 00 30 20 40 20 20 30 00 64504 124 | 00 20 20 20 20 20 20 00 64512 125 } 00 60 20 10 20 20 60 00 64520 126 ~ 00 50 A0 00 00 00 00 00 64528 127  00 60 10 A8 C8 A8 10 60 CHARSET 6 pixels format: 0XXXXX00 bytes in HEX 64536 32 SPACE 00 00 00 00 00 00 00 00 64544 33 ! 00 10 10 10 10 00 10 00 64552 34 " 00 28 28 00 00 00 00 00 64560 35 # 00 28 7C 28 28 7C 28 00 64568 36 $ 00 10 7C 50 7C 14 7C 10 64576 37 % 00 40 48 10 20 48 08 00 64584 38 & 00 10 28 10 2C 40 3C 00 64592 39 ' 00 10 20 00 00 00 00 00 64600 40 ( 00 08 10 10 10 10 08 00 64608 41 ) 00 20 10 10 10 10 20 00 64616 42 * 00 00 28 10 7C 10 28 00 64624 43 + 00 00 10 10 7C 10 10 00 64632 44 , 00 00 00 00 00 10 10 20 64640 45 - 00 00 00 00 3C 00 00 00 64648 46 . 00 00 00 00 00 30 30 00 64656 47 / 00 00 04 08 10 20 00 00 64664 48 0 00 38 44 4C 54 64 38 00 64672 49 1 00 18 28 08 08 08 3C 00 64680 50 2 00 38 44 04 38 40 7C 00 64688 51 3 00 38 44 08 04 44 38 00 64696 52 4 00 08 18 28 48 7C 08 00 64704 53 5 00 7C 40 78 04 44 38 00 64712 54 6 00 38 40 78 44 44 38 00 64720 55 7 00 7C 04 08 10 20 20 00 64728 56 8 00 38 44 38 44 44 38 00 64736 57 9 00 38 44 44 3C 04 38 00 64744 58 : 00 00 00 10 00 00 10 00 64752 59 ; 00 00 10 00 00 10 10 20 64760 60 < 00 00 08 10 20 10 08 00 64768 61 = 00 00 00 3C 00 3C 00 00 64776 62 > 00 00 20 10 08 10 20 00 64784 63 ? 00 38 44 08 10 00 10 00 64792 64 @ 00 38 44 5C 5C 40 38 00 64800 65 A 00 38 44 44 7C 44 44 00 64808 66 B 00 78 44 78 44 44 78 00 64816 67 C 00 38 44 40 40 44 38 00 64824 68 D 00 70 48 44 44 48 70 00 64832 69 E 00 7C 40 78 40 40 7C 00 64840 70 F 00 7C 40 78 40 40 40 00 64848 71 G 00 38 44 40 4C 44 38 00 64856 72 H 00 44 44 7C 44 44 44 00 64864 73 I 00 38 10 10 10 10 38 00 64872 74 J 00 04 04 04 44 44 38 00 64880 75 K 00 48 50 60 50 48 44 00 64888 76 L 00 40 40 40 40 40 7C 00 64896 77 M 00 44 6C 54 44 44 44 00 64904 78 N 00 44 64 54 4C 44 44 00 64912 79 O 00 38 44 44 44 44 38 00 64920 80 P 00 78 44 44 78 40 40 00 64928 81 Q 00 38 44 44 54 4C 38 00 64936 82 R 00 78 44 44 78 48 44 00 64944 83 S 00 38 40 38 04 44 38 00 64952 84 T 00 FC 10 10 10 10 10 00 64960 85 U 00 44 44 44 44 44 38 00 64968 86 V 00 44 44 44 44 28 10 00 64976 87 W 00 44 44 44 44 54 28 00 64984 88 X 00 44 28 10 10 28 44 00 64992 89 Y 00 84 48 30 10 10 10 00 65000 90 Z 00 7C 04 08 10 20 7C 00 65008 91 [ 00 38 20 20 20 20 30 00 65016 92 \ 00 00 40 20 10 08 04 00 65024 93 ] 00 70 10 10 10 10 70 00 65032 94 ^ 00 10 38 54 10 10 10 00 65040 95 _ 00 00 00 00 00 00 00 FC 65048 96 ` 00 18 24 70 20 20 7C 00 65056 97 a 00 00 38 04 3C 44 3C 00 65064 98 b 00 20 20 38 24 24 38 00 65072 99 c 00 00 1C 20 20 20 1C 00 65080 100 d 00 04 04 3C 44 44 3C 00 65088 101 e 00 00 38 44 78 40 3C 00 65096 102 f 00 0C 10 18 10 10 10 00 65104 103 g 00 00 3C 44 44 3C 04 38 65112 104 h 00 40 40 78 44 44 44 00 65120 105 i 00 10 00 30 10 10 38 00 65128 106 j 00 04 00 04 04 04 24 18 65136 107 k 00 20 28 30 30 28 24 00 65144 108 l 00 10 10 10 10 10 0C 00 65152 109 m 00 00 68 54 54 54 54 00 65160 110 n 00 00 78 44 44 44 44 00 65168 111 o 00 00 38 44 44 44 38 00 65176 112 p 00 00 78 44 44 78 40 40 65184 113 q 00 00 38 48 48 38 08 0C 65192 114 r 00 00 1C 20 20 20 20 00 65200 115 s 00 00 38 40 38 04 78 00 65208 116 t 00 10 38 10 10 10 0C 00 65216 117 u 00 00 44 44 44 44 38 00 65224 118 v 00 00 44 44 28 28 10 00 65232 119 w 00 00 44 54 54 54 28 00 65240 120 x 00 00 44 28 10 28 44 00 65248 121 y 00 00 44 44 44 3C 04 38 65256 122 z 00 00 7C 08 10 20 7C 00 65264 123 { 00 18 10 20 10 10 10 00 65272 124 | 00 10 10 10 10 10 10 00 65280 125 } 00 70 10 08 10 10 70 00 65288 126 ~ 00 28 50 00 00 00 00 00 65296 127  00 30 48 94 A4 94 48 30