Mainly for Rich J, who asked about this sort of stuff.. Cheers! // CHRIS AppleSoft Graphic, Input, Output and String Instructions ----------------------------------------------------------------- GR ; Method 1 JSR \$FB40 ; Sets Lo-Res graphics mode with 4 lines of text ; and clears the graphic area to black ;Method 2 STA \$C050 ; Sets Lo-Res graphics mode with 4 lines of text STA \$C053 ; but doesn't clear the graphics area STA \$C054 STA \$C056 ----------------------------------------------------------------- COLOR LDA #N ; Sets the plotting color to N, 0 <= N <= 15 JSR \$F864 ----------------------------------------------------------------- PLOT LDY #X ; Lo-Res Plot X (Horizontal) Coordinate (0-39) LDA #Y ; Lo-Res Plot Y (Vertical) Coordinate (0-39) JSR \$F800 ----------------------------------------------------------------- HLIN LDA #Y ; Y Coordinate (0-39) LDY #Xr ; Rightmost X Coordinate (0-39) STY \$2C ; Store it at H2 LDY #Xl ; Leftmost X Coordinate (0-39) JSR \$F819 ----------------------------------------------------------------- VLIN LDY #X ; X Coordinate (0-39) LDA #Yb ; Bottom Y Coordinate (0-39) STA \$2C ; Store it at V2 LDA #Yt ; Top Y Coordinate (0-39) JSR \$F828 ----------------------------------------------------------------- SCRN LDY #X ; X Coordinate (0-39) LDA #Y ; Y Coordinate (0-39) JSR \$F871 ; Result (0-15) in Accumulator ----------------------------------------------------------------- HGR ; Method 1 JSR \$F3E2 ; Sets Hi-Res Mode with 4 lines of text, ; and clears the graphics screen ; Method 2 STA \$C050 ; Sets Hi-Res Mode with 4 lines of text, STA \$C053 ; and doesn't clear the graphics screen STA \$C054 STA \$C057 LDA #\$20 STA \$E6 ----------------------------------------------------------------- HGR2 ; Method 1 JSR \$F3D8 ; Full Screen Hi-Res Page 2, Clears Screen ; Method 2 STA \$C050 ; Full Screen Hi-Res Page 2, Doesn't Clear Screen STA \$C052 STA \$C055 STA \$C057 LDA #\$40 STA \$E6 ----------------------------------------------------------------- HCOLOR LDA #N ; Select Color N (0-7) JSR \$F6EC ----------------------------------------------------------------- HPLOT LDX #Xl ; Low Byte of X Coordinate (0-255) LDY #Xh ; High Byte of X Coordinate (0 or 1) LDA #Y ; Y Coordinate (0-191) JSR \$F457 ----------------------------------------------------------------- HPLOT TO LDA #Xl ; Low Byte of X Coordinate (0-255) LDX #Xh ; High Byte of X Coordinate (0 or 1) LDY #Y ; Y Coordinate (0-191) JSR \$F53A ----------------------------------------------------------------- PDL(X) LDX #N ; Select Paddle (0-3 on //e and II+; 0-1 on //c) JSR \$FB1E ; Result in Y register ----------------------------------------------------------------- ROT LDA #N ; Sets rotation (0-255), immediately before DRAW ; or XDRAW call [See DRAW and XDRAW] ----------------------------------------------------------------- SCALE LDA #N ; Sets SCALE, N = scale value STA \$E7 ----------------------------------------------------------------- DRAW LDY #Xh ; High byte of X Coordinate LDX #Xl ; Low byte of X Coordinate LDA #Y ; Y Coordinate JSR \$F411 ; Move Hi-Res Cursor LDY #SAH ; High Byte of Actual Shape Address (not table) LDX #SAL ; Low Byte of actual shape address LDA #R ; Set Rotation JSR \$F601 ; Execute the DRAW Function ----------------------------------------------------------------- XDRAW LDY #Xh ; High byte of X Coordinate LDX #Xl ; Low byte of X Coordinate LDA #Y ; Y Coordinate JSR \$F411 ; Move Hi-Res Cursor LDY #SAH ; High Byte of Actual Shape Address (not table) LDX #SAL ; Low Byte of actual shape address LDA #R ; Set Rotation JSR \$F65D ; Execute the XDRAW Function ----------------------------------------------------------------- TEXT ; Method 1 JSR \$FB2F ; Sets text mode, normal full-screen format ; Method 2 STA \$C051 ; Text mode, window set to existing parameters ----------------------------------------------------------------- HOME JSR \$FC58 ; Clears Text Screen, Cursor to upper left ----------------------------------------------------------------- NORMAL JSR \$FE84 ; Set Normal-Text Mode ----------------------------------------------------------------- INVERSE JSR \$FE80 ; Set Inverse-Text Mode ----------------------------------------------------------------- FLASH LDA #\$7F ; Set Flashing-Text Mode JSR \$FE86 ----------------------------------------------------------------- PRINT JSR \$FD8E ; Prints a carriage-return ----------------------------------------------------------------- PRINT "AB" LDA #\$C1 ; Code for letter "A" JSR \$FDED ; (COUT) Print "A" LDA #\$C2 ; Code for letter "B" JSR \$FDED ; (COUT) Print "B" JSR \$FD8E ; Print Carriage-Return ----------------------------------------------------------------- GET A\$ JSR \$FD0C ; Hex code of character is in Accumulator ----------------------------------------------------------------- VTAB LDA #n ; Count STA \$25 JSR \$FC22 ----------------------------------------------------------------- RND JSR \$EFAE LDA \$9F ; Get Random Number ----------------------------------------------------------------- INPUT A\$ JSR \$FD6A ; On return, X register contains length of string ; and string data is at \$200 STX addr ; Save Length of string at user address TXA ; Move Length of Accumulator BEQ L1 ; Jump to L1 if Length is 0 TAY ; Set Y register to Length DEX ; Set X register to length - 1 L2: LDA \$200,X ; Get Character from \$200 Buffer STA addr,Y ; Save at user address buffer DEX DEY BNE L2 L1: RTS ----------------------------------------------------------------- PRINT A\$; LDA addr ; Get string length (first byte) BEQ L2 ; Exit if Length is 0 LDX #1 ; Point to start of string L1: LDA addr,X ; Get Character JSR \$FDED ; Print Character INX ; Move To Next Character CPX addr ; Compare X Register to Length of String BCC L1 BEQ L1 L2: RTS -----------------------------------------------------------------