diff --git a/README.md b/README.md index 33ebf0c..75ab15c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ #Apple ]\[ //e HGR Font 6502 Assembly Language Tutorial -Revision: 40, Jan 26, 2016. +Revision: 41, Jan 26, 2016. # Table of Contents @@ -36,6 +36,7 @@ Revision: 40, Jan 26, 2016. * Exercise 1: ScrollHgrUpLine() * Exercise 2: ScrollHgrUpPixel() * Recap +* What's Next? * Conclusion * Solutions * Solution 1: ScrollHgrUpLine() @@ -445,138 +446,146 @@ Ouch! We're using 1K of our precious 64K. Now we know why all those font glyphs ### Raw Font Data -I've saved you the trouble of converting all the pixels to hex. Remember, you may want to **mute your sound** since the Apple will beep at the semi-colon "comments". +I've saved you the trouble of converting all the pixels to hex. :-) Enter in (or download the raw binary [font.bin](font.bin) and with AppleWin press `F7`, type `bload font.bin,6000`, press `F7`): - 6000:10 08 36 7F 3F 3F 7E 36 ; ^@ - 6008:10 08 36 41 21 21 4A 36 ; ^A - 6010:00 00 02 06 0E 1E 36 42 ; ^B - 6018:7F 22 14 08 08 14 2A 7F ; ^C - 6020:00 40 20 11 0A 04 04 00 ; ^D - 6028:7F 3F 5F 6C 75 7B 7B 7F ; ^E - 6030:70 60 7E 31 79 30 3F 02 ; ^F - 6038:00 18 07 00 07 0C 08 70 ; ^G - 6040:08 04 02 7F 02 04 08 00 ; ^H - 6048:00 00 00 00 00 00 00 2A ; ^I - 6050:08 08 08 08 49 2A 1C 08 ; ^J - 6058:08 1C 2A 49 08 08 08 08 ; ^K - 6060:7F 00 00 00 00 00 00 00 ; ^L - 6068:40 40 40 44 46 7F 06 04 ; ^M - 6070:3F 3F 3F 3F 3F 3F 3F 3F ; ^N - 6078:13 18 1C 7E 1C 18 10 6F ; ^O - 6080:64 0C 1C 3F 1C 0C 04 7B ; ^P - 6088:40 48 08 7F 3E 1C 48 40 ; ^Q - 6090:40 48 1C 3E 7E 08 48 40 ; ^R - 6098:00 00 00 7F 00 00 00 00 ; ^S - 60A0:01 01 01 01 01 01 01 7F ; ^T - 60A8:08 10 20 7F 20 10 08 00 ; ^U - 60B0:2A 55 2A 55 2A 55 2A 55 ; ^V - 60B8:55 2A 55 2A 55 2A 55 2A ; ^W - 60C0:00 3E 41 01 01 01 7F 00 ; ^X - 60C8:00 00 3F 40 40 40 7F 00 ; ^Y - 60D0:40 40 40 40 40 40 40 40 ; ^Z - 60D8:08 1C 3E 7F 3E 1C 08 00 ; ^[ - 60E0:7F 00 00 00 00 00 00 7F ; ^\ - 60E8:14 14 77 00 77 14 14 00 ; ^] - 60F0:7F 40 40 4C 4C 40 40 7F ; ^^ - 60F8:01 01 01 01 01 01 01 01 ; ^_ - 6100:00 00 00 00 00 00 00 00 ; - 6108:08 08 08 08 08 00 08 00 ; ! - 6110:14 14 14 00 00 00 00 00 ; " - 6118:14 14 3E 14 3E 14 14 00 ; # - 6120:08 3C 0A 1C 28 1E 08 00 ; $ - 6128:06 26 10 08 04 32 30 00 ; % - 6130:04 0A 0A 04 2A 12 2C 00 ; & - 6138:08 08 08 00 00 00 00 00 ; ' - 6140:08 04 02 02 02 04 08 00 ; ( - 6148:08 10 20 20 20 10 08 00 ; ) - 6150:08 2A 1C 08 1C 2A 08 00 ; * - 6158:00 08 08 3E 08 08 00 00 ; + - 6160:00 00 00 00 08 08 04 00 ; , - 6168:00 00 00 3E 00 00 00 00 ; - - 6170:00 00 00 00 00 00 08 00 ; . - 6178:00 20 10 08 04 02 00 00 ; / - 6180:1C 22 32 2A 26 22 1C 00 ; 0 - 6188:08 0C 08 08 08 08 1C 00 ; 1 - 6190:1C 22 20 18 04 02 3E 00 ; 2 - 6198:3E 20 10 18 20 22 1C 00 ; 3 - 61A0:10 18 14 12 3E 10 10 00 ; 4 - 61A8:3E 02 1E 20 20 22 1C 00 ; 5 - 61B0:38 04 02 1E 22 22 1C 00 ; 6 - 61B8:3E 20 10 08 04 04 04 00 ; 7 - 61C0:1C 22 22 1C 22 22 1C 00 ; 8 - 61C8:1C 22 22 3C 20 10 0E 00 ; 9 - 61D0:00 00 08 00 08 00 00 00 ; : - 61D8:00 00 08 00 08 08 04 00 ; ; - 61E0:10 08 04 02 04 08 10 00 ; < - 61E8:00 00 3E 00 3E 00 00 00 ; = - 61F0:04 08 10 20 10 08 04 00 ; > - 61F8:1C 22 10 08 08 00 08 00 ; ? - 6200:1C 22 2A 3A 1A 02 3C 00 ; @ - 6208:08 14 22 22 3E 22 22 00 ; A - 6210:1E 22 22 1E 22 22 1E 00 ; B - 6218:1C 22 02 02 02 22 1C 00 ; C - 6220:1E 22 22 22 22 22 1E 00 ; D - 6228:3E 02 02 1E 02 02 3E 00 ; E - 6230:3E 02 02 1E 02 02 02 00 ; F - 6238:3C 02 02 02 32 22 3C 00 ; G - 6240:22 22 22 3E 22 22 22 00 ; H - 6248:1C 08 08 08 08 08 1C 00 ; I - 6250:20 20 20 20 20 22 1C 00 ; J - 6258:22 12 0A 06 0A 12 22 00 ; K - 6260:02 02 02 02 02 02 3E 00 ; L - 6268:22 36 2A 2A 22 22 22 00 ; M - 6270:22 22 26 2A 32 22 22 00 ; N - 6278:1C 22 22 22 22 22 1C 00 ; O - 6280:1E 22 22 1E 02 02 02 00 ; P - 6288:1C 22 22 22 2A 12 2C 00 ; Q - 6290:1E 22 22 1E 0A 12 22 00 ; R - 6298:1C 22 02 1C 20 22 1C 00 ; S - 62A0:3E 08 08 08 08 08 08 00 ; T - 62A8:22 22 22 22 22 22 1C 00 ; U - 62B0:22 22 22 22 22 14 08 00 ; V - 62B8:22 22 22 2A 2A 36 22 00 ; W - 62C0:22 22 14 08 14 22 22 00 ; X - 62C8:22 22 14 08 08 08 08 00 ; Y - 62D0:3E 20 10 08 04 02 3E 00 ; Z - 62D8:3E 06 06 06 06 06 3E 00 ; [ - 62E0:00 02 04 08 10 20 00 00 ; \ - 62E8:3E 30 30 30 30 30 3E 00 ; ] - 62F0:00 00 08 14 22 00 00 00 ; ^ - 62F8:00 00 00 00 00 00 00 7F ; _ - 6300:04 08 10 00 00 00 00 00 ; ` - 6308:00 00 1C 20 3C 22 3C 00 ; a - 6310:02 02 1E 22 22 22 1E 00 ; b - 6318:00 00 3C 02 02 02 3C 00 ; c - 6320:20 20 3C 22 22 22 3C 00 ; d - 6328:00 00 1C 22 3E 02 3C 00 ; e - 6330:18 24 04 1E 04 04 04 00 ; f - 6338:00 00 1C 22 22 3C 20 1C ; g - 6340:02 02 1E 22 22 22 22 00 ; h - 6348:08 00 0C 08 08 08 1C 00 ; i - 6350:10 00 18 10 10 10 12 0C ; j - 6358:02 02 22 12 0E 12 22 00 ; k - 6360:0C 08 08 08 08 08 1C 00 ; l - 6368:00 00 36 2A 2A 2A 22 00 ; m - 6370:00 00 1E 22 22 22 22 00 ; n - 6378:00 00 1C 22 22 22 1C 00 ; o - 6380:00 00 1E 22 22 1E 02 02 ; p - 6388:00 00 3C 22 22 3C 20 20 ; q - 6390:00 00 3A 06 02 02 02 00 ; r - 6398:00 00 3C 02 1C 20 1E 00 ; s - 63A0:04 04 1E 04 04 24 18 00 ; t - 63A8:00 00 22 22 22 32 2C 00 ; u - 63B0:00 00 22 22 22 14 08 00 ; v - 63B8:00 00 22 22 2A 2A 36 00 ; w - 63C0:00 00 22 14 08 14 22 00 ; x - 63C8:00 00 22 22 22 3C 20 1C ; y - 63D0:00 00 3E 10 08 04 3E 00 ; z - 63D8:38 0C 0C 06 0C 0C 38 00 ; { - 63E0:08 08 08 08 08 08 08 08 ; | - 63E8:0E 18 18 30 18 18 0E 00 ; } - 63F0:2C 1A 00 00 00 00 00 00 ; ~ - 63F8:00 2A 14 2A 14 2A 00 00 ; +``` + 6000:10 08 36 7F 3F 3F 7E 36 '@'^ + 6008:10 08 36 41 21 21 4A 36 'A'^ + 6010:00 00 02 06 0E 1E 36 42 'B'^ + 6018:7F 22 14 08 08 14 2A 7F 'C'^ + 6020:00 40 20 11 0A 04 04 00 'D'^ + 6028:7F 3F 5F 6C 75 7B 7B 7F 'E'^ + 6030:70 60 7E 31 79 30 3F 02 'F'^ + 6038:00 18 07 00 07 0C 08 70 'G'^ + 6040:08 04 02 7F 02 04 08 00 'H'^ + 6048:00 00 00 00 00 00 00 2A 'I'^ + 6050:08 08 08 08 49 2A 1C 08 'J'^ + 6058:08 1C 2A 49 08 08 08 08 'K'^ + 6060:7F 00 00 00 00 00 00 00 'L'^ + 6068:40 40 40 44 46 7F 06 04 'M'^ + 6070:3F 3F 3F 3F 3F 3F 3F 3F 'N'^ + 6078:13 18 1C 7E 1C 18 10 6F 'O'^ + 6080:64 0C 1C 3F 1C 0C 04 7B 'P'^ + 6088:40 48 08 7F 3E 1C 48 40 'Q'^ + 6090:40 48 1C 3E 7E 08 48 40 'R'^ + 6098:00 00 00 7F 00 00 00 00 'S'^ + 60A0:01 01 01 01 01 01 01 7F 'T'^ + 60A8:08 10 20 7F 20 10 08 00 'U'^ + 60B0:2A 55 2A 55 2A 55 2A 55 'V'^ + 60B8:55 2A 55 2A 55 2A 55 2A 'W'^ + 60C0:00 3E 41 01 01 01 7F 00 'X'^ + 60C8:00 00 3F 40 40 40 7F 00 'Y'^ + 60D0:40 40 40 40 40 40 40 40 'Z'^ + 60D8:08 1C 3E 7F 3E 1C 08 00 '['^ + 60E0:7F 00 00 00 00 00 00 7F '\'^ + 60E8:14 14 77 00 77 14 14 00 ']'^ + 60F0:7F 40 40 4C 4C 40 40 7F '^'^ + 60F8:01 01 01 01 01 01 01 01 '_'^ + 6100:00 00 00 00 00 00 00 00 ' + 6108:08 08 08 08 08 00 08 00 '! + 6110:14 14 14 00 00 00 00 00 '" + 6118:14 14 3E 14 3E 14 14 00 '# + 6120:08 3C 0A 1C 28 1E 08 00 '$ + 6128:06 26 10 08 04 32 30 00 '% + 6130:04 0A 0A 04 2A 12 2C 00 '& + 6138:08 08 08 00 00 00 00 00 '' + 6140:08 04 02 02 02 04 08 00 '( + 6148:08 10 20 20 20 10 08 00 ') + 6150:08 2A 1C 08 1C 2A 08 00 '* + 6158:00 08 08 3E 08 08 00 00 '+ + 6160:00 00 00 00 08 08 04 00 ', + 6168:00 00 00 3E 00 00 00 00 '- + 6170:00 00 00 00 00 00 08 00 '. + 6178:00 20 10 08 04 02 00 00 '/ + 6180:1C 22 32 2A 26 22 1C 00 '0 + 6188:08 0C 08 08 08 08 1C 00 '1 + 6190:1C 22 20 18 04 02 3E 00 '2 + 6198:3E 20 10 18 20 22 1C 00 '3 + 61A0:10 18 14 12 3E 10 10 00 '4 + 61A8:3E 02 1E 20 20 22 1C 00 '5 + 61B0:38 04 02 1E 22 22 1C 00 '6 + 61B8:3E 20 10 08 04 04 04 00 '7 + 61C0:1C 22 22 1C 22 22 1C 00 '8 + 61C8:1C 22 22 3C 20 10 0E 00 '9 + 61D0:00 00 08 00 08 00 00 00 ': + 61D8:00 00 08 00 08 08 04 00 '; + 61E0:10 08 04 02 04 08 10 00 '< + 61E8:00 00 3E 00 3E 00 00 00 '= + 61F0:04 08 10 20 10 08 04 00 '> + 61F8:1C 22 10 08 08 00 08 00 '? + 6200:1C 22 2A 3A 1A 02 3C 00 '@ + 6208:08 14 22 22 3E 22 22 00 'A + 6210:1E 22 22 1E 22 22 1E 00 'B + 6218:1C 22 02 02 02 22 1C 00 'C + 6220:1E 22 22 22 22 22 1E 00 'D + 6228:3E 02 02 1E 02 02 3E 00 'E + 6230:3E 02 02 1E 02 02 02 00 'F + 6238:3C 02 02 02 32 22 3C 00 'G + 6240:22 22 22 3E 22 22 22 00 'H + 6248:1C 08 08 08 08 08 1C 00 'I + 6250:20 20 20 20 20 22 1C 00 'J + 6258:22 12 0A 06 0A 12 22 00 'K + 6260:02 02 02 02 02 02 3E 00 'L + 6268:22 36 2A 2A 22 22 22 00 'M + 6270:22 22 26 2A 32 22 22 00 'N + 6278:1C 22 22 22 22 22 1C 00 'O + 6280:1E 22 22 1E 02 02 02 00 'P + 6288:1C 22 22 22 2A 12 2C 00 'Q + 6290:1E 22 22 1E 0A 12 22 00 'R + 6298:1C 22 02 1C 20 22 1C 00 'S + 62A0:3E 08 08 08 08 08 08 00 'T + 62A8:22 22 22 22 22 22 1C 00 'U + 62B0:22 22 22 22 22 14 08 00 'V + 62B8:22 22 22 2A 2A 36 22 00 'W + 62C0:22 22 14 08 14 22 22 00 'X + 62C8:22 22 14 08 08 08 08 00 'Y + 62D0:3E 20 10 08 04 02 3E 00 'Z + 62D8:3E 06 06 06 06 06 3E 00 '[ + 62E0:00 02 04 08 10 20 00 00 '\ + 62E8:3E 30 30 30 30 30 3E 00 '] + 62F0:00 00 08 14 22 00 00 00 '^ + 62F8:00 00 00 00 00 00 00 7F '_ + 6300:04 08 10 00 00 00 00 00 '` + 6308:00 00 1C 20 3C 22 3C 00 'a + 6310:02 02 1E 22 22 22 1E 00 'b + 6318:00 00 3C 02 02 02 3C 00 'c + 6320:20 20 3C 22 22 22 3C 00 'd + 6328:00 00 1C 22 3E 02 3C 00 'e + 6330:18 24 04 1E 04 04 04 00 'f + 6338:00 00 1C 22 22 3C 20 1C 'g + 6340:02 02 1E 22 22 22 22 00 'h + 6348:08 00 0C 08 08 08 1C 00 'i + 6350:10 00 18 10 10 10 12 0C 'j + 6358:02 02 22 12 0E 12 22 00 'k + 6360:0C 08 08 08 08 08 1C 00 'l + 6368:00 00 36 2A 2A 2A 22 00 'm + 6370:00 00 1E 22 22 22 22 00 'n + 6378:00 00 1C 22 22 22 1C 00 'o + 6380:00 00 1E 22 22 1E 02 02 'p + 6388:00 00 3C 22 22 3C 20 20 'q + 6390:00 00 3A 06 02 02 02 00 'r + 6398:00 00 3C 02 1C 20 1E 00 's + 63A0:04 04 1E 04 04 24 18 00 't + 63A8:00 00 22 22 22 32 2C 00 'u + 63B0:00 00 22 22 22 14 08 00 'v + 63B8:00 00 22 22 2A 2A 36 00 'w + 63C0:00 00 22 14 08 14 22 00 'x + 63C8:00 00 22 22 22 3C 20 1C 'y + 63D0:00 00 3E 10 08 04 3E 00 'z + 63D8:38 0C 0C 06 0C 0C 38 00 '{ + 63E0:08 08 08 08 08 08 08 08 '| + 63E8:0E 18 18 30 18 18 0E 00 '} + 63F0:2C 1A 00 00 00 00 00 00 '~ + 63F8:00 2A 14 2A 14 2A 00 00 '* +``` + +I also recommend "saving" a copy of this font higher in memory. + +``` +7000<6000.63FFM +``` (For the advanced user, you can save this: `BSAVE FONT.BIN,A$6000,L$400`) @@ -2122,6 +2131,8 @@ Here are all the (core) routines we've entered in so far: (To save this: `BSAVE CODE_0300.BIN,A$300,L$D0`) +# What's next? + What's left? Quite a few things actually: * Copy the 80-Column text screen to DHGR (Double High Resolution)