https://www.cocopedia.com/wiki/api.php?action=feedcontributions&user=Tlindner&feedformat=atomCoCopedia - The Tandy/Radio Shack Color Computer Wiki - User contributions [en]2024-03-29T08:38:53ZUser contributionsMediaWiki 1.41.0https://www.cocopedia.com/wiki/index.php?title=Advanced_Color_BASIC_Documentation&diff=10950Advanced Color BASIC Documentation2024-03-23T17:49:36Z<p>Tlindner: /* CONFIG */</p>
<hr />
<div>== Advanced Color BASIC - New and updated features explained ==<br />
<br />
=== Introduction ===<br />
This document explains the version 0.0.7 of Advanced Color BASIC ROM found late in 2023.<br><br />
It is from Robert Killgus' collection.<br><br />
This is a very early version of the software and eventually became Deluxe Color BASIC.<br />
<br />
=== Allows lowercase characters in keywords. ===<br />
=== Key repeat is built in. ===<br />
<br />
=== Full screen editor is always available. ===<br />
* Hold alternate and arrow keys to move the cursor around.<br />
* Alternate and 'I' will insert a space and move the characters after the cursor to the right one space.<br />
* Alternate and 'D' will delete the character under the cursor and shift the remaining characters to the left.<br />
* Alternate and 'E' will delete the characters after the cursor to the end of the line.<br />
* Alternate and ‘H” will move the cursor to the top left corner of the screen.<br />
* Right Arrow (without the alternate key, Control-I) will move the cursor right 8 spaces.<br />
* Left Arrow (without the alternate key, Control-H) will move the cursor one space to the left, and clear the character.<br />
* Control and 'U', Shift-Left Arrow will clear the line and move the cursor to the left.<br />
* The break key will abort editing and put the cursor at the bottom left of the screen.<br />
* CLEAR (Control-L) will abort editing and clear the screen.<br />
Press the enter key to commit an edited line. You do not have to be at the end of a line.<br />
<br />
=== New device number: #-3. ===<br />
Sends and receives data to/from the new serial port.<br />
Uses:<br />
PRINT #-3, "HELLO WORLD"<br />
<br />
=== RESTORE enhancement ===<br />
The RESTORE command by itself (as before) will reset the READ/DATA ptr to the first DATA line in the current BASIC program. A new option of specifying the line number of the DATA statement that the next READ should come from has been added.<br />
RESTORE 1000:'This sets the next READ to get data from line 1000.<br />
<br />
=== RAM Disk ===<br />
Drive 4 is a RAM Disk. It has 12 granules available. It is available even if there is no disk cartridge inserted.<br />
<br />
If a disk cartridge is inserted on cold boot, you are presented with a menu option to go to BASIC or "Disk". If you choose "Disk" the equivalent of a DOS command is executed.<br />
<br />
== New commands ==<br />
<br />
=== ERROR <value> ===<br />
Will cause the computer to stop the program and issue the respective error.<br />
<br />
=== RESUME <line number> ===<br />
Resumes a program at line number from the error handler.<br />
<br />
=== WHILE <boolean expression> / WEND ===<br />
This is a loop construct that will execute the statements between WHILE and WEND repeatedly until the boolean expression is false.<br />
<br />
=== TONE channel, toneperiod, amplitude ===<br />
* channel: 1-3<br />
* toneperiod: 0-4095<br />
* amplitude: 0-15<br />
<br />
=== NOISE channel,noiseperiod,amplitude ===<br />
* channel: 1-3<br />
* noiseperiod: 0-31<br />
* amplitude 0-15<br />
<br />
=== ENV param1,param2,param3,param4,param5 ===<br />
* 5 numeric parameters 0-65535 allowed (TBD)<br />
<br />
TONE 1,2048,15 ' start tone 2048 on channel 1 at max volume<br />
NOISE 2,31,15 ' start noise 31 on channel 2 at max volume<br />
NOISE 2,0 ' stop noise on channel 2<br />
TONE 1,0,0 ' stop tone on channel 1<br />
SOUND command unaltered<br />
<br />
TBD determine if PLAY command supports 3-voice like N60 BASIC (also by Microsoft) does<br />
<br />
=== CHAIN ===<br />
<br />
Chains to another BASIC program. Optional line number to start 2nd program running from.<br />
<br />
CHAIN "PROGRAM[.BAS][,<line number>]<br />
<br />
Line number can be a variable.<br />
<br />
If no COMMON command has been issued before CHAIN, then all variables are initialized in the called program (same as RUN). However, any numeric variables or arrays defined in a COMMON command will be passed intact to the called program.<br />
<br />
=== COMMON ===<br />
This defines variables to pass along to a CHAIN'ed program. From what I can tell, these can only be be numeric (either straight variables or arrays), but not strings. For regular variables, specify the 1 or 2 character variable name. For arrays, specify the array name with open and closes parenthesis, but with no number to designate how many elements (the chained program will inherit the size used by the calling program).<br />
COMMON A,B,C,SC()<br />
<br />
=== TERM ===<br />
Executes the ROM based terminal program (the cursor changes from a blinking black one to a blinking blue one to let the user know that they are in terminal mode). Further details on commands and Escape sequences within the terminal programming coming soon.<br />
ALT-BREAK = Exit terminal<br />
F1 = toggle CR / CR LF<br />
F2 = toggle Local Echo on/off<br />
<br />
=== CONFIG ===<br />
Configures the UART Serial port:<br><br />
CONFIG #-3,[1-15],[1-5],[5-8],[1-2]<br><br />
==== First parameter: ====<br />
BAUD<br><br />
* 1 = 50<br />
* 2 = 75<br />
* 3 = 109.92<br />
* 4 = 135.56<br />
* 5 = 150<br />
* 6 = 300<br />
* 7 = 600<br />
* 8 = 1,200<br />
* 9 = 1,800<br />
* 10 = 2,400<br />
* 11 = 3,600<br />
* 12 = 4,800<br />
* 13 = 7,200<br />
* 14 = 9,600<br />
* 15 = 19,200<br />
Default: 6<br />
<br />
==== Second Parameter: ====<br />
Sent to 6551 command register<br><br />
* 1: $09 00001001 - No Parity<br />
* 2: $29 00101001 - Odd Parity<br />
* 3: $69 01101001 - Even Parity<br />
* 4: $A9 10101001 - Mark Parity<br />
* 5: $E9 11101001 - Space Parity<br />
* Transmit interrupt disabled<br />
Default: 1<br />
<br />
==== Third parameter: ====<br />
Data word length, 5 to 8.<br />
* Default: 8<br />
<br />
==== Fourth parameter: ====<br />
Stop Bits<br />
* 1 = 1 stop bit<br />
* 2 = 2 stop bits<br />
Default: 1<br />
<br />
=== MAPMODE <value> ===<br />
If the value is 0, the Color Computer is set to 0.89 MHz for the entire address space.<br />
If the value is 1, the Color Computer is set to 1.78 MHz speed when reading from ROM, and 0.89 MHz when reading or writing to RAM.<br />
<br />
=== XOR ===<br />
The exclusive or operator is true if 1 (and only 1) input is true, otherwise it is false.<br><br />
This is used in the same sense as AND and OR in if/then statements:<br />
IF A XOR B THEN 40<br />
It is also use like AND and OR in bit wise expressions:<br />
C = A XOR B<br />
<br />
=== ERR ===<br />
Variable that contains the last error number.<br />
<br />
=== ERL ===<br />
Variable that contains the line number where the last error occurred.<br />
<br />
=== TIME ===<br />
Returns the current number of 1/60th clock ticks that the current TIME$ value represents (including hours, minutes and seconds).<br />
<br>Please note that it rolls over at 24 hours.<br />
<br />
=== TIME$ ===<br />
Will either return the current 24 hour clock value, or set the 24 hour clock value, using a string format. The string format is "HH:MM:SS", in 24 hour time format, so HH can be 0 to 23, MM can be 0 to 59, and SS can be 0 to 59.<br />
Examples:<br />
A$=TIME$<br />
TIME$="13:25:00"<br />
<br />
=== STRIG(button) ===<br />
This function returns the state of one of the four joystick buttons. Negative 1 if pressed, zero if not pressed.<br><br />
Button numbers 1, 3, 5, 7 return the real time value of the button state. This allows rapid fire with the button held down.<br><br />
* 1 - Left joystick button 1<br />
* 3 - Left joystick button 2<br />
* 5 - Right joystick button 1<br />
* 7 - Right joystick button 2<br />
Button numbers 0, 2, 4, 6 return -1 if the button was pressed since the last time this function was called.<br><br />
It will then return 0 as long as the button is held down. A new button press will be required to get another -1. This is for single shot fire - the user needs to let go and press the button again in order to fire again.<br />
* 0 - Left joystick button 1<br />
* 2 - Left joystick button 2<br />
* 4 - Right joystick button 1<br />
* 6 - Right joystick button 2<br />
<br />
=== INPUT$(count, device) ===<br />
Used to scan an input device and accumulate a string:<br />
10 A$=INPUT$(3,#0)<br />
20 ? A$<br />
Will pause the program and wait for three key presses. They are put into A$. This will support cassette, serial and disk file I/O.<br />
<br />
=== ON ERROR GOTO <line number> ===<br />
BASIC will jump to line number when an error is encountered. ERL and ERR will contain the line number with the error and the numeric error code, respectively.<br />
<br />
== Changed Commands: ==<br />
<br />
The EDIT will now accept a single line number or a range. The command will clear the screen, list the program line/lines and put the cursor at the start of the screen.<br />
<br />
A CLS value of 9 to 255 will cold start the computer. We suspect that this is a bug that should eventually be fixed.<br />
<br />
A CLS value greater than 255 will cause an ?FC error.<br />
<br />
<br />
== Advanced Color BASIC - added ROM vector calls ===<br />
<br />
Like Color BASIC and Disk BASIC, which used Extended indirect addresses to call functions within the ROM’s (like JOYIN, DSKCON, etc.), Advanced Color BASIC seems to reserve from $8000-$8015 for additional calls as well. This allows the routines themselves to move around as the ROM was updated, but calling programs would have a set point to enter them.<br />
<br />
[$8000] - Calls $FB00, which is a 3 entry table of LBRA instructions:<br />
LBRA $FD32 (executes the TERM (terminal program) command, I believe)<br />
LBRA $FB1A<br />
LBRA $FD92<br />
<br />
[$8002] - Calls $FB09, which is a 1 entry table of LBRA instructions (I assume more would have<br />
been added later)<br />
LBRA $FE16<br />
<br />
[$8004] - ??? (points to $09D4, which is in BASIC’s data area)<br />
<br />
[$8006] - ??? (points to $E968)<br />
<br />
[$8008] - ??? (points to $0ABE, which is in BASIC’s data area)<br />
<br />
[$800A] - ??? (points to $AD15)<br />
<br />
[$800C] - Call $9254, which checks the 6551 initialized flag (>$0A04). If it is 0 (not initialized), it will initialize the 6551 & it’s related variables including 128 byte receive buffer. If not, it just returns.<br />
<br />
[$800E] - ??? (points to $929D)<br />
<br />
[$8010] - ??? (points to $DE28)<br />
<br />
[$8012] - Calls $92E7, which will return a character from the 128 byte RS232 receive buffer, OR wait for an RS232 character to be received if the buffer is empty.<br />
<br />
[$8014] - Calls $92BD, which will transmit a character through the RS232.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Advanced_Color_BASIC_Documentation&diff=10949Advanced Color BASIC Documentation2024-03-23T17:12:39Z<p>Tlindner: Properly title chain command.</p>
<hr />
<div>== Advanced Color BASIC - New and updated features explained ==<br />
<br />
=== Introduction ===<br />
This document explains the version 0.0.7 of Advanced Color BASIC ROM found late in 2023.<br><br />
It is from Robert Killgus' collection.<br><br />
This is a very early version of the software and eventually became Deluxe Color BASIC.<br />
<br />
=== Allows lowercase characters in keywords. ===<br />
=== Key repeat is built in. ===<br />
<br />
=== Full screen editor is always available. ===<br />
* Hold alternate and arrow keys to move the cursor around.<br />
* Alternate and 'I' will insert a space and move the characters after the cursor to the right one space.<br />
* Alternate and 'D' will delete the character under the cursor and shift the remaining characters to the left.<br />
* Alternate and 'E' will delete the characters after the cursor to the end of the line.<br />
* Alternate and ‘H” will move the cursor to the top left corner of the screen.<br />
* Right Arrow (without the alternate key, Control-I) will move the cursor right 8 spaces.<br />
* Left Arrow (without the alternate key, Control-H) will move the cursor one space to the left, and clear the character.<br />
* Control and 'U', Shift-Left Arrow will clear the line and move the cursor to the left.<br />
* The break key will abort editing and put the cursor at the bottom left of the screen.<br />
* CLEAR (Control-L) will abort editing and clear the screen.<br />
Press the enter key to commit an edited line. You do not have to be at the end of a line.<br />
<br />
=== New device number: #-3. ===<br />
Sends and receives data to/from the new serial port.<br />
Uses:<br />
PRINT #-3, "HELLO WORLD"<br />
<br />
=== RESTORE enhancement ===<br />
The RESTORE command by itself (as before) will reset the READ/DATA ptr to the first DATA line in the current BASIC program. A new option of specifying the line number of the DATA statement that the next READ should come from has been added.<br />
RESTORE 1000:'This sets the next READ to get data from line 1000.<br />
<br />
=== RAM Disk ===<br />
Drive 4 is a RAM Disk. It has 12 granules available. It is available even if there is no disk cartridge inserted.<br />
<br />
If a disk cartridge is inserted on cold boot, you are presented with a menu option to go to BASIC or "Disk". If you choose "Disk" the equivalent of a DOS command is executed.<br />
<br />
== New commands ==<br />
<br />
=== ERROR <value> ===<br />
Will cause the computer to stop the program and issue the respective error.<br />
<br />
=== RESUME <line number> ===<br />
Resumes a program at line number from the error handler.<br />
<br />
=== WHILE <boolean expression> / WEND ===<br />
This is a loop construct that will execute the statements between WHILE and WEND repeatedly until the boolean expression is false.<br />
<br />
=== TONE channel, toneperiod, amplitude ===<br />
* channel: 1-3<br />
* toneperiod: 0-4095<br />
* amplitude: 0-15<br />
<br />
=== NOISE channel,noiseperiod,amplitude ===<br />
* channel: 1-3<br />
* noiseperiod: 0-31<br />
* amplitude 0-15<br />
<br />
=== ENV param1,param2,param3,param4,param5 ===<br />
* 5 numeric parameters 0-65535 allowed (TBD)<br />
<br />
TONE 1,2048,15 ' start tone 2048 on channel 1 at max volume<br />
NOISE 2,31,15 ' start noise 31 on channel 2 at max volume<br />
NOISE 2,0 ' stop noise on channel 2<br />
TONE 1,0,0 ' stop tone on channel 1<br />
SOUND command unaltered<br />
<br />
TBD determine if PLAY command supports 3-voice like N60 BASIC (also by Microsoft) does<br />
<br />
=== CHAIN ===<br />
<br />
Chains to another BASIC program. Optional line number to start 2nd program running from.<br />
<br />
CHAIN "PROGRAM[.BAS][,<line number>]<br />
<br />
Line number can be a variable.<br />
<br />
If no COMMON command has been issued before CHAIN, then all variables are initialized in the called program (same as RUN). However, any numeric variables or arrays defined in a COMMON command will be passed intact to the called program.<br />
<br />
=== COMMON ===<br />
This defines variables to pass along to a CHAIN'ed program. From what I can tell, these can only be be numeric (either straight variables or arrays), but not strings. For regular variables, specify the 1 or 2 character variable name. For arrays, specify the array name with open and closes parenthesis, but with no number to designate how many elements (the chained program will inherit the size used by the calling program).<br />
COMMON A,B,C,SC()<br />
<br />
=== TERM ===<br />
Executes the ROM based terminal program (the cursor changes from a blinking black one to a blinking blue one to let the user know that they are in terminal mode). Further details on commands and Escape sequences within the terminal programming coming soon.<br />
ALT-BREAK = Exit terminal<br />
F1 = toggle CR / CR LF<br />
F2 = toggle Local Echo on/off<br />
<br />
=== CONFIG ===<br />
Configures the UART Serial port:<br><br />
CONFIG #-3,[1-15],[1-5],[5-8],[1-2]<br><br />
==== First parameter: ====<br />
BAUD<br><br />
* 1 = 50<br />
* 2 = 75<br />
* 3 = 109.92<br />
* 4 = 135.56<br />
* 5 = 150<br />
* 6 = 300<br />
* 7 = 600<br />
* 8 = 1,200<br />
* 9 = 1,800<br />
* 10 = 2,400<br />
* 11 = 3,600<br />
* 12 = 4,800<br />
* 13 = 7,200<br />
* 14 = 9,600<br />
* 15 = 19,200<br />
Default: 6<br />
<br />
==== Second Parameter: ====<br />
Sent to 6551 command register<br><br />
* 1: $09 00001001 - No Parity<br />
* 2: $29 00101001 - Odd Parity<br />
* 3: $69 01101001 - Even Parity<br />
* 4: $A9 10101001 - Mark Parity<br />
* 5: $E9 11101001 - Space Parity<br />
* Transmit interrupt disabled<br />
Default: 1<br />
<br />
==== Third parameter: ====<br />
Data word length, 5 to 8.<br />
* Default: 8<br />
<br />
==== Fourth parameter: ====<br />
Stop Bits<br />
* 1 = 1 stop bit<br />
* 2 = 2 stop bits<br />
Default: 1<br />
<br />
=== MAPMODE <value> ===<br />
If the value is 0, the Color Computer is set to 0.89 MHz for the entire address space.<br />
If the value is 1, the Color Computer is set to 1.78 MHz speed when reading from ROM, and 0.89 MHz when reading or writing to RAM.<br />
<br />
=== XOR ===<br />
The exclusive or operator is true if 1 (and only 1) input is true, otherwise it is false.<br><br />
This is used in the same sense as AND and OR in if/then statements:<br />
IF A XOR B THEN 40<br />
It is also use like AND and OR in bit wise expressions:<br />
C = A XOR B<br />
<br />
=== ERR ===<br />
Variable that contains the last error number.<br />
<br />
=== ERL ===<br />
Variable that contains the line number where the last error occurred.<br />
<br />
=== TIME ===<br />
Returns the current number of 1/60th clock ticks that the current TIME$ value represents (including hours, minutes and seconds).<br />
<br>Please note that it rolls over at 24 hours.<br />
<br />
=== TIME$ ===<br />
Will either return the current 24 hour clock value, or set the 24 hour clock value, using a string format. The string format is "HH:MM:SS", in 24 hour time format, so HH can be 0 to 23, MM can be 0 to 59, and SS can be 0 to 59.<br />
Examples:<br />
A$=TIME$<br />
TIME$="13:25:00"<br />
<br />
=== STRIG(button) ===<br />
This function returns the state of one of the four joystick buttons. Negative 1 if pressed, zero if not pressed.<br><br />
Button numbers 1, 3, 5, 7 return the real time value of the button state. This allows rapid fire with the button held down.<br><br />
* 1 - Left joystick button 1<br />
* 3 - Left joystick button 2<br />
* 5 - Right joystick button 1<br />
* 7 - Right joystick button 2<br />
Button numbers 0, 2, 4, 6 return -1 if the button was pressed since the last time this function was called.<br><br />
It will then return 0 as long as the button is held down. A new button press will be required to get another -1. This is for single shot fire - the user needs to let go and press the button again in order to fire again.<br />
* 0 - Left joystick button 1<br />
* 2 - Left joystick button 2<br />
* 4 - Right joystick button 1<br />
* 6 - Right joystick button 2<br />
<br />
=== INPUT$(count, device) ===<br />
Used to scan an input device and accumulate a string:<br />
10 A$=INPUT$(3,#0)<br />
20 ? A$<br />
Will pause the program and wait for three key presses. They are put into A$. This will support cassette, serial and disk file I/O.<br />
<br />
=== ON ERROR GOTO <line number> ===<br />
BASIC will jump to line number when an error is encountered. ERL and ERR will contain the line number with the error and the numeric error code, respectively.<br />
<br />
== Changed Commands: ==<br />
<br />
The EDIT will now accept a single line number or a range. The command will clear the screen, list the program line/lines and put the cursor at the start of the screen.<br />
<br />
A CLS value of 9 to 255 will cold start the computer. We suspect that this is a bug that should eventually be fixed.<br />
<br />
A CLS value greater than 255 will cause an ?FC error.<br />
<br />
<br />
== Advanced Color BASIC - added ROM vector calls ===<br />
<br />
Like Color BASIC and Disk BASIC, which used Extended indirect addresses to call functions within the ROM’s (like JOYIN, DSKCON, etc.), Advanced Color BASIC seems to reserve from $8000-$8015 for additional calls as well. This allows the routines themselves to move around as the ROM was updated, but calling programs would have a set point to enter them.<br />
<br />
[$8000] - Calls $FB00, which is a 3 entry table of LBRA instructions:<br />
LBRA $FD32 (executes the TERM (terminal program) command, I believe)<br />
LBRA $FB1A<br />
LBRA $FD92<br />
<br />
[$8002] - Calls $FB09, which is a 1 entry table of LBRA instructions (I assume more would have<br />
been added later)<br />
LBRA $FE16<br />
<br />
[$8004] - ??? (points to $09D4, which is in BASIC’s data area)<br />
<br />
[$8006] - ??? (points to $E968)<br />
<br />
[$8008] - ??? (points to $0ABE, which is in BASIC’s data area)<br />
<br />
[$800A] - ??? (points to $AD15)<br />
<br />
[$800C] - Call $9254, which checks the 6551 initialized flag (>$0A04). If it is 0 (not initialized), it will initialize the 6551 & it’s related variables including 128 byte receive buffer. If not, it just returns.<br />
<br />
[$800E] - ??? (points to $929D)<br />
<br />
[$8010] - ??? (points to $DE28)<br />
<br />
[$8012] - Calls $92E7, which will return a character from the 128 byte RS232 receive buffer, OR wait for an RS232 character to be received if the buffer is empty.<br />
<br />
[$8014] - Calls $92BD, which will transmit a character through the RS232.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Deluxe_Color_Computer&diff=10913Deluxe Color Computer2024-03-02T20:39:26Z<p>Tlindner: /* Pictures */</p>
<hr />
<div>= Deluxe Color Computer =<br />
<br />
== Pre-Production Boards ==<br />
<br />
Three pre-production (PP) boards for the canceled Deluxe Color Computer exist:<br />
* Boisy Pitre has gathered two of the Deluxe pre-production boards, one from John Prickett and one from Greg Zumwalt which did not have Advanced or Deluxe ROMs.<br />
* Brian Weiseler has Robert Kilgus' Deluxe with Advanced Color BASIC 00.00.07 ROMs intact<br />
<br />
== Hardware ==<br />
<br />
The Deluxe Color Computer upgrades the [[Color Computer 2]] to include new hardware and software features<br />
* Motorola 6847 T1 Video Display Generator (VDG) with true lowercase and lowercase descender characters<br />
* General Instruments AY-3-8913 Programmable Sound Generator the same as [[Speech/Sound Cartridge (26-3144A)]], [[Symphony-12]], [[Philharmonic-12]], or [[CoCo PSG]]<br />
* American Megatrends (AMI) S6551P Asynchronous Communication Interface Adapter (ACIA) the same as used in the [[Deluxe RS232 Pak]]<br />
* Additional circuitry for 60Hz timer interrupts<br />
* Additional color burst control<br />
* Additional address decoding to make the PSG and S6551 into the CoCo memory map<br />
==== Memory Map ====<br />
* $FF00 - $FF1F - PIA 0<br />
* $FF20 - $FF2F - PIA 1<br />
* $FF30 - Option Control Register<br />
{| class="wikitable"<br />
|+ Option Control Register Description<br />
|-<br />
! Bit Position!! Function <br />
|-<br />
| 0|| A14<br />
|-<br />
| 1|| A15<br />
|-<br />
| 2|| Enable above for RAM range: $4000-$7FFF<br />
|-<br />
| 3|| Alternate color set (blue / green alpha display)<br />
|-<br />
| 4|| N/A<br />
|-<br />
| 5|| N/A<br />
|-<br />
| 6|| Enable 60Hz interrupt<br />
|-<br />
| 7|| Enable cartridge select: 1 internal / 0 external<br />
|}<br />
<gallery><br />
Deluxe_Option_Register_Description.jpg|Option Register<br />
</gallery><br />
* $FF38 AY-3-8910 Data register<br />
* $FF39 AY-3-8910 Control Register Latch<br />
* $FF3C SY6551 Transmit / Receive Register<br />
* $FF3D SY6551 Read status registers<br />
* $FF3E SY6551 Command register<br />
* $FF3F SY6551 Control Register<br />
<br />
== Software ==<br />
<br />
The Deluxe Color Computer contains an upgraded Color BASIC which merges Color BASIC, Extended Color BASIC, and Disk Extended Color BASIC into a single 32K Advanced Color BASIC ROM image.<br />
<br />
Advanced Color BASIC includes a number of new features as well:<br />
* [[Advanced Color BASIC Documentation]]<br />
<br />
[https://www.pagetable.com/?p=43 Bill Gates' Easter Egg] exists in the Advanced Color BASIC as well from BF67 to BF70<br />
<br />
== Pictures ==<br />
<br />
<gallery><br />
DeluxeCoCoMotherboard.jpg|Main board<br />
Deluxe_coco_daughter_card_front.jpg|Front of daughter card<br />
deluxe_coco_daughter_card_back.jpg|Back of daughter card<br />
</gallery></div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=File:DeluxeCoCoMotherboard.jpg&diff=10912File:DeluxeCoCoMotherboard.jpg2024-03-02T20:37:36Z<p>Tlindner: Picture of Deluxe Color Computer Motherboard taken by Brian Wiesler.</p>
<hr />
<div>== Summary ==<br />
Picture of Deluxe Color Computer Motherboard taken by Brian Wiesler.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Advanced_Color_BASIC_Documentation&diff=10910Advanced Color BASIC Documentation2024-03-02T19:37:41Z<p>Tlindner: /* ENV param1,param2,param3,param4,param5 */</p>
<hr />
<div>== Advanced Color BASIC - New and updated features explained ==<br />
<br />
=== Introduction ===<br />
This document explains the version 0.0.7 of Advanced Color BASIC ROM found late in 2023.<br><br />
It is from Robert Killgus' collection.<br><br />
This is a very early version of the software and eventually became Deluxe Color BASIC.<br />
<br />
=== Allows lowercase characters in keywords. ===<br />
<br />
=== Full screen editor is always available. ===<br />
* Hold alternate and arrow keys to move the cursor around.<br />
* Alternate and 'I' will insert a space and move the characters after the cursor to the right one space.<br />
* Alternate and 'D' will delete the character under the cursor and shift the remaining characters to the left.<br />
* Alternate and 'E' will delete the characters after the cursor to the end of the line.<br />
* Alternate and ‘H” will move the cursor to the top left corner of the screen.<br />
* Right Arrow (without the alternate key, Control-I) will move the cursor right 8 spaces.<br />
* Left Arrow (without the alternate key, Control-H) will move the cursor one space to the left, and clear the character.<br />
* Control and 'U', Shift-Left Arrow will clear the line and move the cursor to the left.<br />
* The break key will abort editing and put the cursor at the bottom left of the screen.<br />
* CLEAR (Control-L) will abort editing and clear the screen.<br />
Press the enter key to commit an edited line. You do not have to be at the end of a line.<br />
<br />
=== New device number: #-3. ===<br />
Sends and receives data to/from the new serial port.<br />
Uses:<br />
PRINT #-3, "HELLO WORLD"<br />
<br />
=== New device number: #-4 - tbd ===<br />
<br />
=== RAM Disk ===<br />
Drive 4 is a RAM Disk. It has 12 granules available. It is available even if there is no disk cartridge inserted.<br />
<br />
If a disk cartridge is inserted on cold boot, you are presented with a menu option to go to BASIC or "Disk". If you choose "Disk" the equivalent of a DOS command is executed.<br />
<br />
== New commands ==<br />
<br />
=== ERROR <value> ===<br />
Will cause the computer to stop the program and issue the respective error.<br />
<br />
=== RESUME <line number> ===<br />
Resumes a program at line number from the error handler.<br />
<br />
=== WHILE <boolean expression> / WEND ===<br />
This is a loop construct that will execute the statements between WHILE and WEND repeatedly until the boolean expression is false.<br />
<br />
=== TONE channel, toneperiod, amplitude ===<br />
* channel: 1-3<br />
* toneperiod: 0-4095<br />
* amplitude: 0-15<br />
<br />
=== NOISE channel,noiseperiod,amplitude ===<br />
* channel: 1-3<br />
* noiseperiod: 0-31<br />
* amplitude 0-15<br />
<br />
=== ENV param1,param2,param3,param4,param5 ===<br />
* 5 numeric parameters 0-65535 allowed (TBD)<br />
<br />
TONE 1,2048,15 ' start tone 2048 on channel 1 at max volume<br />
NOISE 2,31,15 ' start noise 31 on channel 2 at max volume<br />
NOISE 2,0 ' stop noise on channel 2<br />
TONE 1,0,0 ' stop tone on channel 1<br />
SOUND command unaltered<br />
<br />
TBD determine if PLAY command supports 3-voice like N60 BASIC (also by Microsoft) does<br />
<br />
=== CHAIN - tbd. ===<br />
<br />
=== COMMON ===<br />
Restrictive comment. For Example:<br />
10 COMMON This is a comment : PRINT “HELLO WORLD”<br />
The text after the COMMON command will not be executed, but the command after the colon will. This is different from REM<br />
10 REM This is a comment : PRINT “HELLO WORLD”<br />
The REM command will cause everything to be ignored on the whole line.<br />
<br />
=== TERM ===<br />
Executes the ROM based terminal program (the cursor changes from a blinking black one to a blinking blue one to let the user know that they are in terminal mode). Further details on commands within the terminal programming coming soon.<br />
<br />
=== CONFIG ===<br />
Configures the UART Serial port:<br><br />
CONFIG #-3,[1-15],[1-5],[5-8],[1-2]<br><br />
==== First parameter: ====<br />
BAUD<br><br />
* 1 = 50<br />
* 2 = 75<br />
* 3 = 109.92<br />
* 4 = 135.56<br />
* 5 = 150<br />
* 6 = 300<br />
* 7 = 600<br />
* 8 = 1,200<br />
* 9 = 1,800<br />
* 10 = 2,400<br />
* 11 = 3,600<br />
* 12 = 4,800<br />
* 13 = 7,200<br />
* 14 = 9,600<br />
* 15 = 19,200<br />
Default: 6<br />
<br />
==== Second Parameter: ====<br />
Sent to 6551 command register<br><br />
* 1: $09 00001001 - No Parity<br />
* 2: $29 00101001 - Odd Parity<br />
* 3: $69 01101001 - Even Parity<br />
* 4: $A9 10101001 - Mark Parity<br />
* 5: $E9 11101001 - Space Parity<br />
* Transmit interrupt disabled<br />
Default: 1<br />
<br />
==== Third parameter: ====<br />
Data word length, 5 to 8.<br />
* Default: 8<br />
<br />
==== Fourth parameter: ====<br />
Stop Bits<br />
* 1 = 1 stop bit<br />
* 2 = 2 stop bits<br />
Default: 1<br />
<br />
=== MAPMODE <value> ===<br />
If the value is 0, the Color Computer is set to 0.89 MHz for the entire address space.<br />
If the value is 1, the Color Computer is set to 1.78 MHz speed when reading from ROM, and 0.89 MHz when reading or writing to RAM.<br />
<br />
=== XOR ===<br />
The exclusive or operator is true if 1 (and only 1) input is true, otherwise it is false.<br><br />
This is used in the same sense as AND and OR in if/then statements:<br />
IF A XOR B THEN 40<br />
It is also use like AND and OR in bit wise expressions:<br />
C = A XOR B<br />
<br />
=== ERR ===<br />
Variable that contains the last error number.<br />
<br />
=== ERL ===<br />
Variable that contains the line number where the last error occurred.<br />
<br />
=== TIME ===<br />
Returns the current value for the 24 bit timer (the old Extended BASIC "TIMER" still works as a 16 bit timer).<br><br />
This counter increments 60 times per second and rolls over at 24 hours.<br />
<br />
=== TIME$ ===<br />
Will either return the current 24 hour clock value, or set the 24 hour clock value, using a string format. The string format is "HH:MM:SS", in 24 hour time format, so HH can be 0 to 23, MM can be 0 to 59, and SS can be 0 to 59.<br />
Examples:<br />
A$=TIME$<br />
TIME$="13:25:00"<br />
<br />
=== STRIG(button) ===<br />
This function returns the state of one of the four joystick buttons. Negative 1 if pressed, zero if not pressed.<br><br />
Button numbers 1, 3, 5, 7 return the real time value of the button state. This allows rapid fire with the button held down.<br><br />
* 1 - Left joystick button 1<br />
* 3 - Left joystick button 2<br />
* 5 - Right joystick button 1<br />
* 7 - Right joystick button 2<br />
Button numbers 0, 2, 4, 6 return -1 if the button was pressed since the last time this function was called.<br><br />
It will then return 0 as long as the button is held down. A new button press will be required to get another -1. This is for single shot fire - the user needs to let go and press the button again in order to fire again.<br />
* 0 - Left joystick button 1<br />
* 2 - Left joystick button 2<br />
* 4 - Right joystick button 1<br />
* 6 - Right joystick button 2<br />
<br />
=== INPUT$(count, device) ===<br />
Used to scan an input device and accumulate a string:<br />
10 A$=INPUT$(3,#0)<br />
20 ? A$<br />
Will pause the program and wait for three key presses. They are put into A$. This will support cassette, serial and disk file I/O.<br />
<br />
=== ON ERROR GOTO <line number> ===<br />
BASIC will jump to line number when an error is encountered. ERL and ERR will contain the line number with the error and the numeric error code, respectively.<br />
<br />
== Changed Commands: ==<br />
<br />
The EDIT will now accept a single line number or a range. The command will clear the screen, list the program line/lines and put the cursor at the start of the screen.<br />
<br />
A CLS value of 9 to 255 will cold start the computer. We suspect that this is a bug that should eventually be fixed.<br />
<br />
A CLS value greater than 255 will cause an ?FC error.<br />
<br />
<br />
== Advanced Color BASIC - added ROM vector calls ===<br />
<br />
Like Color BASIC and Disk BASIC, which used Extended indirect addresses to call functions within the ROM’s (like JOYIN, DSKCON, etc.), Advanced Color BASIC seems to reserve from $8000-$8015 for additional calls as well. This allows the routines themselves to move around as the ROM was updated, but calling programs would have a set point to enter them.<br />
<br />
[$8000] - Calls $FB00, which is a 3 entry table of LBRA instructions:<br />
LBRA $FD32 (executes the TERM (terminal program) command, I believe)<br />
LBRA $FB1A<br />
LBRA $FD92<br />
<br />
[$8002] - Calls $FB09, which is a 1 entry table of LBRA instructions (I assume more would have<br />
been added later)<br />
LBRA $FE16<br />
<br />
[$8004] - ??? (points to $09D4, which is in BASIC’s data area)<br />
<br />
[$8006] - ??? (points to $E968)<br />
<br />
[$8008] - ??? (points to $0ABE, which is in BASIC’s data area)<br />
<br />
[$800A] - ??? (points to $AD15)<br />
<br />
[$800C] - Call $9254, which checks the 6551 initialized flag (>$0A04). If it is 0 (not initialized), it will initialize the 6551 & it’s related variables including 128 byte receive buffer. If not, it just returns.<br />
<br />
[$800E] - ??? (points to $929D)<br />
<br />
[$8010] - ??? (points to $DE28)<br />
<br />
[$8012] - Calls $92E7, which will return a character from the 128 byte RS232 receive buffer, OR wait for an RS232 character to be received if the buffer is empty.<br />
<br />
[$8014] - Calls $92BD, which will transmit a character through the RS232.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Advanced_Color_BASIC_Documentation&diff=10909Advanced Color BASIC Documentation2024-03-02T19:36:32Z<p>Tlindner: /* NOISE channel,noiseperiod,amplitude */</p>
<hr />
<div>== Advanced Color BASIC - New and updated features explained ==<br />
<br />
=== Introduction ===<br />
This document explains the version 0.0.7 of Advanced Color BASIC ROM found late in 2023.<br><br />
It is from Robert Killgus' collection.<br><br />
This is a very early version of the software and eventually became Deluxe Color BASIC.<br />
<br />
=== Allows lowercase characters in keywords. ===<br />
<br />
=== Full screen editor is always available. ===<br />
* Hold alternate and arrow keys to move the cursor around.<br />
* Alternate and 'I' will insert a space and move the characters after the cursor to the right one space.<br />
* Alternate and 'D' will delete the character under the cursor and shift the remaining characters to the left.<br />
* Alternate and 'E' will delete the characters after the cursor to the end of the line.<br />
* Alternate and ‘H” will move the cursor to the top left corner of the screen.<br />
* Right Arrow (without the alternate key, Control-I) will move the cursor right 8 spaces.<br />
* Left Arrow (without the alternate key, Control-H) will move the cursor one space to the left, and clear the character.<br />
* Control and 'U', Shift-Left Arrow will clear the line and move the cursor to the left.<br />
* The break key will abort editing and put the cursor at the bottom left of the screen.<br />
* CLEAR (Control-L) will abort editing and clear the screen.<br />
Press the enter key to commit an edited line. You do not have to be at the end of a line.<br />
<br />
=== New device number: #-3. ===<br />
Sends and receives data to/from the new serial port.<br />
Uses:<br />
PRINT #-3, "HELLO WORLD"<br />
<br />
=== New device number: #-4 - tbd ===<br />
<br />
=== RAM Disk ===<br />
Drive 4 is a RAM Disk. It has 12 granules available. It is available even if there is no disk cartridge inserted.<br />
<br />
If a disk cartridge is inserted on cold boot, you are presented with a menu option to go to BASIC or "Disk". If you choose "Disk" the equivalent of a DOS command is executed.<br />
<br />
== New commands ==<br />
<br />
=== ERROR <value> ===<br />
Will cause the computer to stop the program and issue the respective error.<br />
<br />
=== RESUME <line number> ===<br />
Resumes a program at line number from the error handler.<br />
<br />
=== WHILE <boolean expression> / WEND ===<br />
This is a loop construct that will execute the statements between WHILE and WEND repeatedly until the boolean expression is false.<br />
<br />
=== TONE channel, toneperiod, amplitude ===<br />
* channel: 1-3<br />
* toneperiod: 0-4095<br />
* amplitude: 0-15<br />
<br />
=== NOISE channel,noiseperiod,amplitude ===<br />
* channel: 1-3<br />
* noiseperiod: 0-31<br />
* amplitude 0-15<br />
<br />
=== ENV param1,param2,param3,param4,param5 ===<br />
TBD 5 numeric parameters 0-65535 allowed <br />
<br />
TONE 1,2048,15 ' start tone 2048 on channel 1 at max volume<br />
NOISE 2,31,15 ' start noise 31 on channel 2 at max volume<br />
NOISE 2,0 ' stop noise on channel 2<br />
TONE 1,0,0 ' stop tone on channel 1<br />
SOUND command unaltered<br />
TBD determine if PLAY command supports 3-voice like N60 BASIC (also by Microsoft) does<br />
<br />
=== CHAIN - tbd. ===<br />
<br />
=== COMMON ===<br />
Restrictive comment. For Example:<br />
10 COMMON This is a comment : PRINT “HELLO WORLD”<br />
The text after the COMMON command will not be executed, but the command after the colon will. This is different from REM<br />
10 REM This is a comment : PRINT “HELLO WORLD”<br />
The REM command will cause everything to be ignored on the whole line.<br />
<br />
=== TERM ===<br />
Executes the ROM based terminal program (the cursor changes from a blinking black one to a blinking blue one to let the user know that they are in terminal mode). Further details on commands within the terminal programming coming soon.<br />
<br />
=== CONFIG ===<br />
Configures the UART Serial port:<br><br />
CONFIG #-3,[1-15],[1-5],[5-8],[1-2]<br><br />
==== First parameter: ====<br />
BAUD<br><br />
* 1 = 50<br />
* 2 = 75<br />
* 3 = 109.92<br />
* 4 = 135.56<br />
* 5 = 150<br />
* 6 = 300<br />
* 7 = 600<br />
* 8 = 1,200<br />
* 9 = 1,800<br />
* 10 = 2,400<br />
* 11 = 3,600<br />
* 12 = 4,800<br />
* 13 = 7,200<br />
* 14 = 9,600<br />
* 15 = 19,200<br />
Default: 6<br />
<br />
==== Second Parameter: ====<br />
Sent to 6551 command register<br><br />
* 1: $09 00001001 - No Parity<br />
* 2: $29 00101001 - Odd Parity<br />
* 3: $69 01101001 - Even Parity<br />
* 4: $A9 10101001 - Mark Parity<br />
* 5: $E9 11101001 - Space Parity<br />
* Transmit interrupt disabled<br />
Default: 1<br />
<br />
==== Third parameter: ====<br />
Data word length, 5 to 8.<br />
* Default: 8<br />
<br />
==== Fourth parameter: ====<br />
Stop Bits<br />
* 1 = 1 stop bit<br />
* 2 = 2 stop bits<br />
Default: 1<br />
<br />
=== MAPMODE <value> ===<br />
If the value is 0, the Color Computer is set to 0.89 MHz for the entire address space.<br />
If the value is 1, the Color Computer is set to 1.78 MHz speed when reading from ROM, and 0.89 MHz when reading or writing to RAM.<br />
<br />
=== XOR ===<br />
The exclusive or operator is true if 1 (and only 1) input is true, otherwise it is false.<br><br />
This is used in the same sense as AND and OR in if/then statements:<br />
IF A XOR B THEN 40<br />
It is also use like AND and OR in bit wise expressions:<br />
C = A XOR B<br />
<br />
=== ERR ===<br />
Variable that contains the last error number.<br />
<br />
=== ERL ===<br />
Variable that contains the line number where the last error occurred.<br />
<br />
=== TIME ===<br />
Returns the current value for the 24 bit timer (the old Extended BASIC "TIMER" still works as a 16 bit timer).<br><br />
This counter increments 60 times per second and rolls over at 24 hours.<br />
<br />
=== TIME$ ===<br />
Will either return the current 24 hour clock value, or set the 24 hour clock value, using a string format. The string format is "HH:MM:SS", in 24 hour time format, so HH can be 0 to 23, MM can be 0 to 59, and SS can be 0 to 59.<br />
Examples:<br />
A$=TIME$<br />
TIME$="13:25:00"<br />
<br />
=== STRIG(button) ===<br />
This function returns the state of one of the four joystick buttons. Negative 1 if pressed, zero if not pressed.<br><br />
Button numbers 1, 3, 5, 7 return the real time value of the button state. This allows rapid fire with the button held down.<br><br />
* 1 - Left joystick button 1<br />
* 3 - Left joystick button 2<br />
* 5 - Right joystick button 1<br />
* 7 - Right joystick button 2<br />
Button numbers 0, 2, 4, 6 return -1 if the button was pressed since the last time this function was called.<br><br />
It will then return 0 as long as the button is held down. A new button press will be required to get another -1. This is for single shot fire - the user needs to let go and press the button again in order to fire again.<br />
* 0 - Left joystick button 1<br />
* 2 - Left joystick button 2<br />
* 4 - Right joystick button 1<br />
* 6 - Right joystick button 2<br />
<br />
=== INPUT$(count, device) ===<br />
Used to scan an input device and accumulate a string:<br />
10 A$=INPUT$(3,#0)<br />
20 ? A$<br />
Will pause the program and wait for three key presses. They are put into A$. This will support cassette, serial and disk file I/O.<br />
<br />
=== ON ERROR GOTO <line number> ===<br />
BASIC will jump to line number when an error is encountered. ERL and ERR will contain the line number with the error and the numeric error code, respectively.<br />
<br />
== Changed Commands: ==<br />
<br />
The EDIT will now accept a single line number or a range. The command will clear the screen, list the program line/lines and put the cursor at the start of the screen.<br />
<br />
A CLS value of 9 to 255 will cold start the computer. We suspect that this is a bug that should eventually be fixed.<br />
<br />
A CLS value greater than 255 will cause an ?FC error.<br />
<br />
<br />
== Advanced Color BASIC - added ROM vector calls ===<br />
<br />
Like Color BASIC and Disk BASIC, which used Extended indirect addresses to call functions within the ROM’s (like JOYIN, DSKCON, etc.), Advanced Color BASIC seems to reserve from $8000-$8015 for additional calls as well. This allows the routines themselves to move around as the ROM was updated, but calling programs would have a set point to enter them.<br />
<br />
[$8000] - Calls $FB00, which is a 3 entry table of LBRA instructions:<br />
LBRA $FD32 (executes the TERM (terminal program) command, I believe)<br />
LBRA $FB1A<br />
LBRA $FD92<br />
<br />
[$8002] - Calls $FB09, which is a 1 entry table of LBRA instructions (I assume more would have<br />
been added later)<br />
LBRA $FE16<br />
<br />
[$8004] - ??? (points to $09D4, which is in BASIC’s data area)<br />
<br />
[$8006] - ??? (points to $E968)<br />
<br />
[$8008] - ??? (points to $0ABE, which is in BASIC’s data area)<br />
<br />
[$800A] - ??? (points to $AD15)<br />
<br />
[$800C] - Call $9254, which checks the 6551 initialized flag (>$0A04). If it is 0 (not initialized), it will initialize the 6551 & it’s related variables including 128 byte receive buffer. If not, it just returns.<br />
<br />
[$800E] - ??? (points to $929D)<br />
<br />
[$8010] - ??? (points to $DE28)<br />
<br />
[$8012] - Calls $92E7, which will return a character from the 128 byte RS232 receive buffer, OR wait for an RS232 character to be received if the buffer is empty.<br />
<br />
[$8014] - Calls $92BD, which will transmit a character through the RS232.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Advanced_Color_BASIC_Documentation&diff=10908Advanced Color BASIC Documentation2024-03-02T19:36:15Z<p>Tlindner: /* TONE channel, toneperiod, amplitude */</p>
<hr />
<div>== Advanced Color BASIC - New and updated features explained ==<br />
<br />
=== Introduction ===<br />
This document explains the version 0.0.7 of Advanced Color BASIC ROM found late in 2023.<br><br />
It is from Robert Killgus' collection.<br><br />
This is a very early version of the software and eventually became Deluxe Color BASIC.<br />
<br />
=== Allows lowercase characters in keywords. ===<br />
<br />
=== Full screen editor is always available. ===<br />
* Hold alternate and arrow keys to move the cursor around.<br />
* Alternate and 'I' will insert a space and move the characters after the cursor to the right one space.<br />
* Alternate and 'D' will delete the character under the cursor and shift the remaining characters to the left.<br />
* Alternate and 'E' will delete the characters after the cursor to the end of the line.<br />
* Alternate and ‘H” will move the cursor to the top left corner of the screen.<br />
* Right Arrow (without the alternate key, Control-I) will move the cursor right 8 spaces.<br />
* Left Arrow (without the alternate key, Control-H) will move the cursor one space to the left, and clear the character.<br />
* Control and 'U', Shift-Left Arrow will clear the line and move the cursor to the left.<br />
* The break key will abort editing and put the cursor at the bottom left of the screen.<br />
* CLEAR (Control-L) will abort editing and clear the screen.<br />
Press the enter key to commit an edited line. You do not have to be at the end of a line.<br />
<br />
=== New device number: #-3. ===<br />
Sends and receives data to/from the new serial port.<br />
Uses:<br />
PRINT #-3, "HELLO WORLD"<br />
<br />
=== New device number: #-4 - tbd ===<br />
<br />
=== RAM Disk ===<br />
Drive 4 is a RAM Disk. It has 12 granules available. It is available even if there is no disk cartridge inserted.<br />
<br />
If a disk cartridge is inserted on cold boot, you are presented with a menu option to go to BASIC or "Disk". If you choose "Disk" the equivalent of a DOS command is executed.<br />
<br />
== New commands ==<br />
<br />
=== ERROR <value> ===<br />
Will cause the computer to stop the program and issue the respective error.<br />
<br />
=== RESUME <line number> ===<br />
Resumes a program at line number from the error handler.<br />
<br />
=== WHILE <boolean expression> / WEND ===<br />
This is a loop construct that will execute the statements between WHILE and WEND repeatedly until the boolean expression is false.<br />
<br />
=== TONE channel, toneperiod, amplitude ===<br />
* channel: 1-3<br />
* toneperiod: 0-4095<br />
* amplitude: 0-15<br />
<br />
=== NOISE channel,noiseperiod,amplitude ===<br />
channel: 1-3<br />
noiseperiod: 0-31<br />
amplitude 0-15<br />
<br />
=== ENV param1,param2,param3,param4,param5 ===<br />
TBD 5 numeric parameters 0-65535 allowed <br />
<br />
TONE 1,2048,15 ' start tone 2048 on channel 1 at max volume<br />
NOISE 2,31,15 ' start noise 31 on channel 2 at max volume<br />
NOISE 2,0 ' stop noise on channel 2<br />
TONE 1,0,0 ' stop tone on channel 1<br />
SOUND command unaltered<br />
TBD determine if PLAY command supports 3-voice like N60 BASIC (also by Microsoft) does<br />
<br />
=== CHAIN - tbd. ===<br />
<br />
=== COMMON ===<br />
Restrictive comment. For Example:<br />
10 COMMON This is a comment : PRINT “HELLO WORLD”<br />
The text after the COMMON command will not be executed, but the command after the colon will. This is different from REM<br />
10 REM This is a comment : PRINT “HELLO WORLD”<br />
The REM command will cause everything to be ignored on the whole line.<br />
<br />
=== TERM ===<br />
Executes the ROM based terminal program (the cursor changes from a blinking black one to a blinking blue one to let the user know that they are in terminal mode). Further details on commands within the terminal programming coming soon.<br />
<br />
=== CONFIG ===<br />
Configures the UART Serial port:<br><br />
CONFIG #-3,[1-15],[1-5],[5-8],[1-2]<br><br />
==== First parameter: ====<br />
BAUD<br><br />
* 1 = 50<br />
* 2 = 75<br />
* 3 = 109.92<br />
* 4 = 135.56<br />
* 5 = 150<br />
* 6 = 300<br />
* 7 = 600<br />
* 8 = 1,200<br />
* 9 = 1,800<br />
* 10 = 2,400<br />
* 11 = 3,600<br />
* 12 = 4,800<br />
* 13 = 7,200<br />
* 14 = 9,600<br />
* 15 = 19,200<br />
Default: 6<br />
<br />
==== Second Parameter: ====<br />
Sent to 6551 command register<br><br />
* 1: $09 00001001 - No Parity<br />
* 2: $29 00101001 - Odd Parity<br />
* 3: $69 01101001 - Even Parity<br />
* 4: $A9 10101001 - Mark Parity<br />
* 5: $E9 11101001 - Space Parity<br />
* Transmit interrupt disabled<br />
Default: 1<br />
<br />
==== Third parameter: ====<br />
Data word length, 5 to 8.<br />
* Default: 8<br />
<br />
==== Fourth parameter: ====<br />
Stop Bits<br />
* 1 = 1 stop bit<br />
* 2 = 2 stop bits<br />
Default: 1<br />
<br />
=== MAPMODE <value> ===<br />
If the value is 0, the Color Computer is set to 0.89 MHz for the entire address space.<br />
If the value is 1, the Color Computer is set to 1.78 MHz speed when reading from ROM, and 0.89 MHz when reading or writing to RAM.<br />
<br />
=== XOR ===<br />
The exclusive or operator is true if 1 (and only 1) input is true, otherwise it is false.<br><br />
This is used in the same sense as AND and OR in if/then statements:<br />
IF A XOR B THEN 40<br />
It is also use like AND and OR in bit wise expressions:<br />
C = A XOR B<br />
<br />
=== ERR ===<br />
Variable that contains the last error number.<br />
<br />
=== ERL ===<br />
Variable that contains the line number where the last error occurred.<br />
<br />
=== TIME ===<br />
Returns the current value for the 24 bit timer (the old Extended BASIC "TIMER" still works as a 16 bit timer).<br><br />
This counter increments 60 times per second and rolls over at 24 hours.<br />
<br />
=== TIME$ ===<br />
Will either return the current 24 hour clock value, or set the 24 hour clock value, using a string format. The string format is "HH:MM:SS", in 24 hour time format, so HH can be 0 to 23, MM can be 0 to 59, and SS can be 0 to 59.<br />
Examples:<br />
A$=TIME$<br />
TIME$="13:25:00"<br />
<br />
=== STRIG(button) ===<br />
This function returns the state of one of the four joystick buttons. Negative 1 if pressed, zero if not pressed.<br><br />
Button numbers 1, 3, 5, 7 return the real time value of the button state. This allows rapid fire with the button held down.<br><br />
* 1 - Left joystick button 1<br />
* 3 - Left joystick button 2<br />
* 5 - Right joystick button 1<br />
* 7 - Right joystick button 2<br />
Button numbers 0, 2, 4, 6 return -1 if the button was pressed since the last time this function was called.<br><br />
It will then return 0 as long as the button is held down. A new button press will be required to get another -1. This is for single shot fire - the user needs to let go and press the button again in order to fire again.<br />
* 0 - Left joystick button 1<br />
* 2 - Left joystick button 2<br />
* 4 - Right joystick button 1<br />
* 6 - Right joystick button 2<br />
<br />
=== INPUT$(count, device) ===<br />
Used to scan an input device and accumulate a string:<br />
10 A$=INPUT$(3,#0)<br />
20 ? A$<br />
Will pause the program and wait for three key presses. They are put into A$. This will support cassette, serial and disk file I/O.<br />
<br />
=== ON ERROR GOTO <line number> ===<br />
BASIC will jump to line number when an error is encountered. ERL and ERR will contain the line number with the error and the numeric error code, respectively.<br />
<br />
== Changed Commands: ==<br />
<br />
The EDIT will now accept a single line number or a range. The command will clear the screen, list the program line/lines and put the cursor at the start of the screen.<br />
<br />
A CLS value of 9 to 255 will cold start the computer. We suspect that this is a bug that should eventually be fixed.<br />
<br />
A CLS value greater than 255 will cause an ?FC error.<br />
<br />
<br />
== Advanced Color BASIC - added ROM vector calls ===<br />
<br />
Like Color BASIC and Disk BASIC, which used Extended indirect addresses to call functions within the ROM’s (like JOYIN, DSKCON, etc.), Advanced Color BASIC seems to reserve from $8000-$8015 for additional calls as well. This allows the routines themselves to move around as the ROM was updated, but calling programs would have a set point to enter them.<br />
<br />
[$8000] - Calls $FB00, which is a 3 entry table of LBRA instructions:<br />
LBRA $FD32 (executes the TERM (terminal program) command, I believe)<br />
LBRA $FB1A<br />
LBRA $FD92<br />
<br />
[$8002] - Calls $FB09, which is a 1 entry table of LBRA instructions (I assume more would have<br />
been added later)<br />
LBRA $FE16<br />
<br />
[$8004] - ??? (points to $09D4, which is in BASIC’s data area)<br />
<br />
[$8006] - ??? (points to $E968)<br />
<br />
[$8008] - ??? (points to $0ABE, which is in BASIC’s data area)<br />
<br />
[$800A] - ??? (points to $AD15)<br />
<br />
[$800C] - Call $9254, which checks the 6551 initialized flag (>$0A04). If it is 0 (not initialized), it will initialize the 6551 & it’s related variables including 128 byte receive buffer. If not, it just returns.<br />
<br />
[$800E] - ??? (points to $929D)<br />
<br />
[$8010] - ??? (points to $DE28)<br />
<br />
[$8012] - Calls $92E7, which will return a character from the 128 byte RS232 receive buffer, OR wait for an RS232 character to be received if the buffer is empty.<br />
<br />
[$8014] - Calls $92BD, which will transmit a character through the RS232.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Advanced_Color_BASIC_Documentation&diff=10907Advanced Color BASIC Documentation2024-03-02T19:34:43Z<p>Tlindner: /* Full screen editor is always available. */</p>
<hr />
<div>== Advanced Color BASIC - New and updated features explained ==<br />
<br />
=== Introduction ===<br />
This document explains the version 0.0.7 of Advanced Color BASIC ROM found late in 2023.<br><br />
It is from Robert Killgus' collection.<br><br />
This is a very early version of the software and eventually became Deluxe Color BASIC.<br />
<br />
=== Allows lowercase characters in keywords. ===<br />
<br />
=== Full screen editor is always available. ===<br />
* Hold alternate and arrow keys to move the cursor around.<br />
* Alternate and 'I' will insert a space and move the characters after the cursor to the right one space.<br />
* Alternate and 'D' will delete the character under the cursor and shift the remaining characters to the left.<br />
* Alternate and 'E' will delete the characters after the cursor to the end of the line.<br />
* Alternate and ‘H” will move the cursor to the top left corner of the screen.<br />
* Right Arrow (without the alternate key, Control-I) will move the cursor right 8 spaces.<br />
* Left Arrow (without the alternate key, Control-H) will move the cursor one space to the left, and clear the character.<br />
* Control and 'U', Shift-Left Arrow will clear the line and move the cursor to the left.<br />
* The break key will abort editing and put the cursor at the bottom left of the screen.<br />
* CLEAR (Control-L) will abort editing and clear the screen.<br />
Press the enter key to commit an edited line. You do not have to be at the end of a line.<br />
<br />
=== New device number: #-3. ===<br />
Sends and receives data to/from the new serial port.<br />
Uses:<br />
PRINT #-3, "HELLO WORLD"<br />
<br />
=== New device number: #-4 - tbd ===<br />
<br />
=== RAM Disk ===<br />
Drive 4 is a RAM Disk. It has 12 granules available. It is available even if there is no disk cartridge inserted.<br />
<br />
If a disk cartridge is inserted on cold boot, you are presented with a menu option to go to BASIC or "Disk". If you choose "Disk" the equivalent of a DOS command is executed.<br />
<br />
== New commands ==<br />
<br />
=== ERROR <value> ===<br />
Will cause the computer to stop the program and issue the respective error.<br />
<br />
=== RESUME <line number> ===<br />
Resumes a program at line number from the error handler.<br />
<br />
=== WHILE <boolean expression> / WEND ===<br />
This is a loop construct that will execute the statements between WHILE and WEND repeatedly until the boolean expression is false.<br />
<br />
=== TONE channel, toneperiod, amplitude ===<br />
channel: 1-3<br />
toneperiod: 0-4095<br />
amplitude: 0-15<br />
<br />
=== NOISE channel,noiseperiod,amplitude ===<br />
channel: 1-3<br />
noiseperiod: 0-31<br />
amplitude 0-15<br />
<br />
=== ENV param1,param2,param3,param4,param5 ===<br />
TBD 5 numeric parameters 0-65535 allowed <br />
<br />
TONE 1,2048,15 ' start tone 2048 on channel 1 at max volume<br />
NOISE 2,31,15 ' start noise 31 on channel 2 at max volume<br />
NOISE 2,0 ' stop noise on channel 2<br />
TONE 1,0,0 ' stop tone on channel 1<br />
SOUND command unaltered<br />
TBD determine if PLAY command supports 3-voice like N60 BASIC (also by Microsoft) does<br />
<br />
=== CHAIN - tbd. ===<br />
<br />
=== COMMON ===<br />
Restrictive comment. For Example:<br />
10 COMMON This is a comment : PRINT “HELLO WORLD”<br />
The text after the COMMON command will not be executed, but the command after the colon will. This is different from REM<br />
10 REM This is a comment : PRINT “HELLO WORLD”<br />
The REM command will cause everything to be ignored on the whole line.<br />
<br />
=== TERM ===<br />
Executes the ROM based terminal program (the cursor changes from a blinking black one to a blinking blue one to let the user know that they are in terminal mode). Further details on commands within the terminal programming coming soon.<br />
<br />
=== CONFIG ===<br />
Configures the UART Serial port:<br><br />
CONFIG #-3,[1-15],[1-5],[5-8],[1-2]<br><br />
==== First parameter: ====<br />
BAUD<br><br />
* 1 = 50<br />
* 2 = 75<br />
* 3 = 109.92<br />
* 4 = 135.56<br />
* 5 = 150<br />
* 6 = 300<br />
* 7 = 600<br />
* 8 = 1,200<br />
* 9 = 1,800<br />
* 10 = 2,400<br />
* 11 = 3,600<br />
* 12 = 4,800<br />
* 13 = 7,200<br />
* 14 = 9,600<br />
* 15 = 19,200<br />
Default: 6<br />
<br />
==== Second Parameter: ====<br />
Sent to 6551 command register<br><br />
* 1: $09 00001001 - No Parity<br />
* 2: $29 00101001 - Odd Parity<br />
* 3: $69 01101001 - Even Parity<br />
* 4: $A9 10101001 - Mark Parity<br />
* 5: $E9 11101001 - Space Parity<br />
* Transmit interrupt disabled<br />
Default: 1<br />
<br />
==== Third parameter: ====<br />
Data word length, 5 to 8.<br />
* Default: 8<br />
<br />
==== Fourth parameter: ====<br />
Stop Bits<br />
* 1 = 1 stop bit<br />
* 2 = 2 stop bits<br />
Default: 1<br />
<br />
=== MAPMODE <value> ===<br />
If the value is 0, the Color Computer is set to 0.89 MHz for the entire address space.<br />
If the value is 1, the Color Computer is set to 1.78 MHz speed when reading from ROM, and 0.89 MHz when reading or writing to RAM.<br />
<br />
=== XOR ===<br />
The exclusive or operator is true if 1 (and only 1) input is true, otherwise it is false.<br><br />
This is used in the same sense as AND and OR in if/then statements:<br />
IF A XOR B THEN 40<br />
It is also use like AND and OR in bit wise expressions:<br />
C = A XOR B<br />
<br />
=== ERR ===<br />
Variable that contains the last error number.<br />
<br />
=== ERL ===<br />
Variable that contains the line number where the last error occurred.<br />
<br />
=== TIME ===<br />
Returns the current value for the 24 bit timer (the old Extended BASIC "TIMER" still works as a 16 bit timer).<br><br />
This counter increments 60 times per second and rolls over at 24 hours.<br />
<br />
=== TIME$ ===<br />
Will either return the current 24 hour clock value, or set the 24 hour clock value, using a string format. The string format is "HH:MM:SS", in 24 hour time format, so HH can be 0 to 23, MM can be 0 to 59, and SS can be 0 to 59.<br />
Examples:<br />
A$=TIME$<br />
TIME$="13:25:00"<br />
<br />
=== STRIG(button) ===<br />
This function returns the state of one of the four joystick buttons. Negative 1 if pressed, zero if not pressed.<br><br />
Button numbers 1, 3, 5, 7 return the real time value of the button state. This allows rapid fire with the button held down.<br><br />
* 1 - Left joystick button 1<br />
* 3 - Left joystick button 2<br />
* 5 - Right joystick button 1<br />
* 7 - Right joystick button 2<br />
Button numbers 0, 2, 4, 6 return -1 if the button was pressed since the last time this function was called.<br><br />
It will then return 0 as long as the button is held down. A new button press will be required to get another -1. This is for single shot fire - the user needs to let go and press the button again in order to fire again.<br />
* 0 - Left joystick button 1<br />
* 2 - Left joystick button 2<br />
* 4 - Right joystick button 1<br />
* 6 - Right joystick button 2<br />
<br />
=== INPUT$(count, device) ===<br />
Used to scan an input device and accumulate a string:<br />
10 A$=INPUT$(3,#0)<br />
20 ? A$<br />
Will pause the program and wait for three key presses. They are put into A$. This will support cassette, serial and disk file I/O.<br />
<br />
=== ON ERROR GOTO <line number> ===<br />
BASIC will jump to line number when an error is encountered. ERL and ERR will contain the line number with the error and the numeric error code, respectively.<br />
<br />
== Changed Commands: ==<br />
<br />
The EDIT will now accept a single line number or a range. The command will clear the screen, list the program line/lines and put the cursor at the start of the screen.<br />
<br />
A CLS value of 9 to 255 will cold start the computer. We suspect that this is a bug that should eventually be fixed.<br />
<br />
A CLS value greater than 255 will cause an ?FC error.<br />
<br />
<br />
== Advanced Color BASIC - added ROM vector calls ===<br />
<br />
Like Color BASIC and Disk BASIC, which used Extended indirect addresses to call functions within the ROM’s (like JOYIN, DSKCON, etc.), Advanced Color BASIC seems to reserve from $8000-$8015 for additional calls as well. This allows the routines themselves to move around as the ROM was updated, but calling programs would have a set point to enter them.<br />
<br />
[$8000] - Calls $FB00, which is a 3 entry table of LBRA instructions:<br />
LBRA $FD32 (executes the TERM (terminal program) command, I believe)<br />
LBRA $FB1A<br />
LBRA $FD92<br />
<br />
[$8002] - Calls $FB09, which is a 1 entry table of LBRA instructions (I assume more would have<br />
been added later)<br />
LBRA $FE16<br />
<br />
[$8004] - ??? (points to $09D4, which is in BASIC’s data area)<br />
<br />
[$8006] - ??? (points to $E968)<br />
<br />
[$8008] - ??? (points to $0ABE, which is in BASIC’s data area)<br />
<br />
[$800A] - ??? (points to $AD15)<br />
<br />
[$800C] - Call $9254, which checks the 6551 initialized flag (>$0A04). If it is 0 (not initialized), it will initialize the 6551 & it’s related variables including 128 byte receive buffer. If not, it just returns.<br />
<br />
[$800E] - ??? (points to $929D)<br />
<br />
[$8010] - ??? (points to $DE28)<br />
<br />
[$8012] - Calls $92E7, which will return a character from the 128 byte RS232 receive buffer, OR wait for an RS232 character to be received if the buffer is empty.<br />
<br />
[$8014] - Calls $92BD, which will transmit a character through the RS232.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Deluxe_Color_Computer&diff=10807Deluxe Color Computer2024-02-22T02:55:51Z<p>Tlindner: </p>
<hr />
<div>= Deluxe Color Computer =<br />
<br />
== Pre-Production Boards ==<br />
<br />
Three pre-production (PP) boards for the canceled Deluxe Color Computer exist:<br />
* Boisy Pitre has gathered two of the Deluxe pre-production boards, one from John Prickett and one from Greg Zumwalt which did not have Advanced or Deluxe ROMs.<br />
* Brian Weiseler has Robert Kilgus' Deluxe with Advanced Color BASIC 00.00.07 ROMs intact<br />
<br />
== Hardware ==<br />
<br />
The Deluxe Color Computer upgrades the [[Color Computer 2]] to include new hardware and software features<br />
* Motorola 6847 T1 Video Display Generator (VDG) with true lowercase and lowercase descender characters<br />
* General Instruments AY-3-8913 Programmable Sound Generator the same as [[Speech/Sound Cartridge (26-3144A)]], [[Symphony-12]], [[Philharmonic-12]], or [[CoCo PSG]]<br />
* American Megatrends (AMI) S6551P Asynchronous Communication Interface Adapter (ACIA) the same as used in the [[Deluxe RS232 Pak]]<br />
* Additional circuitry for 60Hz timer interrupts<br />
* Additional color burst control<br />
* Additional address decoding to make the PSG and S6551 into the CoCo memory map<br />
==== Memory Map ====<br />
* $FF00 - $FF1F - PIA 0<br />
* $FF20 - $FF2F - PIA 1<br />
* $FF30 - Option Control Register<br />
{| class="wikitable"<br />
|+ Option Control Register Description<br />
|-<br />
! Bit Position!! Function <br />
|-<br />
| 0|| A14<br />
|-<br />
| 1|| A15<br />
|-<br />
| 2|| Enable above for RAM range: $4000-$7FFF<br />
|-<br />
| 3|| Alternate color set (blue / green alpha display)<br />
|-<br />
| 4|| N/A<br />
|-<br />
| 5|| N/A<br />
|-<br />
| 6|| Enable 60Hz interrupt<br />
|-<br />
| 7|| Enable cartridge select: 1 internal / 0 external<br />
|}<br />
<gallery><br />
Deluxe_Option_Register_Description.jpg|Option Register<br />
</gallery><br />
* $FF38 AY-3-8910 Data register<br />
* $FF39 AY-3-8910 Control Register Latch<br />
* $FF3C SY6551 Transmit / Receive Register<br />
* $FF3D SY6551 Read status registers<br />
* $FF3E SY6551 Command register<br />
* $FF3F SY6551 Control Register<br />
<br />
== Software ==<br />
<br />
The Deluxe Color Computer contains an upgraded Color BASIC which merges Color BASIC, Extended Color BASIC, and Disk Extended Color BASIC into a single 32K Advanced Color BASIC ROM image.<br />
<br />
Advanced Color BASIC includes a number of new features as well:<br />
* [[Advanced Color BASIC Documentation]]<br />
<br />
[https://www.pagetable.com/?p=43 Bill Gates' Easter Egg] exists in the Advanced Color BASIC as well from BF67 to BF70<br />
<br />
== Pictures ==<br />
<br />
<gallery><br />
Deluxe_coco_daughter_card_front.jpg|Front of daughter card<br />
deluxe_coco_daughter_card_back.jpg|Back of daughter card<br />
</gallery></div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=File:Deluxe_coco_daughter_card_back.jpg&diff=10806File:Deluxe coco daughter card back.jpg2024-02-22T02:53:13Z<p>Tlindner: Back of the daughter card.</p>
<hr />
<div>== Summary ==<br />
Back of the daughter card.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=File:Deluxe_coco_daughter_card_front.jpg&diff=10805File:Deluxe coco daughter card front.jpg2024-02-22T02:51:39Z<p>Tlindner: Picture of the front of the daughter card.</p>
<hr />
<div>== Summary ==<br />
Picture of the front of the daughter card.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Deluxe_Color_Computer&diff=10804Deluxe Color Computer2024-02-21T06:29:57Z<p>Tlindner: /* Memory Map */</p>
<hr />
<div>= Deluxe Color Computer =<br />
<br />
== Pre-Production Boards ==<br />
<br />
Three pre-production (PP) boards for the canceled Deluxe Color Computer exist:<br />
* Boisy Pitre has gathered two of the Deluxe pre-production boards, one from John Prickett and one from Greg Zumwalt which did not have Advanced or Deluxe ROMs.<br />
* Brian Weiseler has Robert Kilgus' Deluxe with Advanced Color BASIC 00.00.07 ROMs intact<br />
<br />
== Hardware ==<br />
<br />
The Deluxe Color Computer upgrades the [[Color Computer 2]] to include new hardware and software features<br />
* Motorola 6847 T1 Video Display Generator (VDG) with true lowercase and lowercase descender characters<br />
* General Instruments AY-3-8913 Programmable Sound Generator the same as [[Speech/Sound Cartridge (26-3144A)]], [[Symphony-12]], [[Philharmonic-12]], or [[CoCo PSG]]<br />
* American Megatrends (AMI) S6551P Asynchronous Communication Interface Adapter (ACIA) the same as used in the [[Deluxe RS232 Pak]]<br />
* Additional circuitry for 60Hz timer interrupts<br />
* Additional color burst control<br />
* Additional address decoding to make the PSG and S6551 into the CoCo memory map<br />
==== Memory Map ====<br />
* $FF00 - $FF1F - PIA 0<br />
* $FF20 - $FF2F - PIA 1<br />
* $FF30 - Option Control Register<br />
{| class="wikitable"<br />
|+ Option Control Register Description<br />
|-<br />
! Bit Position!! Function <br />
|-<br />
| 0|| A14<br />
|-<br />
| 1|| A15<br />
|-<br />
| 2|| Enable above for RAM range: $4000-$7FFF<br />
|-<br />
| 3|| Alternate color set (blue / green alpha display)<br />
|-<br />
| 4|| N/A<br />
|-<br />
| 5|| N/A<br />
|-<br />
| 6|| Enable 60Hz interrupt<br />
|-<br />
| 7|| Enable cartridge select: 1 internal / 0 external<br />
|}<br />
<gallery><br />
Deluxe_Option_Register_Description.jpg|Option Register<br />
</gallery><br />
* $FF38 AY-3-8910 Data register<br />
* $FF39 AY-3-8910 Control Register Latch<br />
* $FF3C SY6551 Transmit / Receive Register<br />
* $FF3D SY6551 Read status registers<br />
* $FF3E SY6551 Command register<br />
* $FF3F SY6551 Control Register<br />
<br />
== Software ==<br />
<br />
The Deluxe Color Computer contains an upgraded Color BASIC which merges Color BASIC, Extended Color BASIC, and Disk Extended Color BASIC into a single 32K Advanced Color BASIC ROM image.<br />
<br />
Advanced Color BASIC includes a number of new features as well:<br />
* [[Advanced Color BASIC Documentation]]<br />
<br />
[https://www.pagetable.com/?p=43 Bill Gates' Easter Egg] exists in the Advanced Color BASIC as well from BF67 to BF70</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=File:Deluxe_Option_Register_Description.jpg&diff=10803File:Deluxe Option Register Description.jpg2024-02-21T06:28:44Z<p>Tlindner: Handwritten note to Robert Kilgus about the Deluxe option register.</p>
<hr />
<div>== Summary ==<br />
Handwritten note to Robert Kilgus about the Deluxe option register.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Advanced_Color_BASIC_Documentation&diff=10799Advanced Color BASIC Documentation2024-02-19T02:24:08Z<p>Tlindner: /* INPUT$(count, device) */</p>
<hr />
<div>== Advanced Color BASIC - New and updated features explained ==<br />
<br />
=== Introduction ===<br />
This document explains the version 0.0.7 of Advanced Color BASIC ROM found late in 2023.<br><br />
It is from Robert Killgus' collection.<br><br />
This is a very early version of the software and eventually became Deluxe Color BASIC.<br />
<br />
=== Allows lowercase characters in keywords. ===<br />
<br />
=== Full screen editor is always available. ===<br />
Hold alternate and arrow keys to move the cursor around.<br />
Alternate and 'I' will insert a space and move the characters after the cursor to the right one space.<br />
Alternate and 'D' will delete the character under the cursor and shift the remaining characters to the left.<br />
Alternate and 'E' will delete the characters after the cursor to the end of the line.<br />
Alternate and ‘H” will move the cursor to the top left corner of the screen.<br />
Right Arrow (without the alternate key) will move the cursor right 9 spaces.<br />
The break key will abort editing and put the cursor at the bottom left of the screen.<br />
Press the enter key to commit an edited line. You do not have to be at the end of a line.<br />
<br />
=== New device number: #-3. ===<br />
Sends and receives data to/from the new serial port.<br />
Uses:<br />
PRINT #-3, "HELLO WORLD"<br />
<br />
=== New device number: #-4 - tbd ===<br />
<br />
=== RAM Disk ===<br />
Drive 4 is a RAM Disk. It has 12 granules available. It is available even if there is no disk cartridge inserted.<br />
<br />
If a disk cartridge is inserted on cold boot, you are presented with a menu option to go to BASIC or "Disk". If you choose "Disk" the equivalent of a DOS command is executed.<br />
<br />
== New commands ==<br />
<br />
=== ERROR <value> ===<br />
Will cause the computer to stop the program and issue the respective error.<br />
<br />
=== RESUME <line number> ===<br />
Resumes a program at line number from the error handler.<br />
<br />
=== WHILE <boolean expression> / WEND ===<br />
This is a loop construct that will execute the statements between WHILE and WEND repeatedly until the boolean expression is false.<br />
<br />
=== TONE channel, toneperiod, amplitude ===<br />
channel: 1-3<br />
toneperiod: 0-4095<br />
amplitude: 0-15<br />
<br />
=== NOISE channel,noiseperiod,amplitude ===<br />
channel: 1-3<br />
noiseperiod: 0-31<br />
amplitude 0-15<br />
<br />
=== ENV param1,param2,param3,param4,param5 ===<br />
TBD 5 numeric parameters 0-65535 allowed <br />
<br />
TONE 1,2048,15 ' start tone 2048 on channel 1 at max volume<br />
NOISE 2,31,15 ' start noise 31 on channel 2 at max volume<br />
NOISE 2,0 ' stop noise on channel 2<br />
TONE 1,0,0 ' stop tone on channel 1<br />
SOUND command unaltered<br />
TBD determine if PLAY command supports 3-voice like N60 BASIC (also by Microsoft) does<br />
<br />
=== CHAIN - tbd. ===<br />
<br />
=== COMMON ===<br />
Restrictive comment. For Example:<br />
10 COMMON This is a comment : PRINT “HELLO WORLD”<br />
The text after the COMMON command will not be executed, but the command after the colon will. This is different from REM<br />
10 REM This is a comment : PRINT “HELLO WORLD”<br />
The REM command will cause everything to be ignored on the whole line.<br />
<br />
=== TERM ===<br />
Executes the ROM based terminal program (the cursor changes from a blinking black one to a blinking blue one to let the user know that they are in terminal mode). Further details on commands within the terminal programming coming soon.<br />
<br />
=== CONFIG ===<br />
Configures the UART Serial port:<br><br />
CONFIG #-3,[1-15],[1-5],[5-8],[1-2]<br><br />
==== First parameter: ====<br />
BAUD<br><br />
* 1 = 50<br />
* 2 = 75<br />
* 3 = 109.92<br />
* 4 = 135.56<br />
* 5 = 150<br />
* 6 = 300<br />
* 7 = 600<br />
* 8 = 1,200<br />
* 9 = 1,800<br />
* 10 = 2,400<br />
* 11 = 3,600<br />
* 12 = 4,800<br />
* 13 = 7,200<br />
* 14 = 9,600<br />
* 15 = 19,200<br />
Default: 6<br />
<br />
==== Second Parameter: ====<br />
Sent to 6551 command register<br><br />
* 1: $09 00001001 - No Parity<br />
* 2: $29 00101001 - Odd Parity<br />
* 3: $69 01101001 - Even Parity<br />
* 4: $A9 10101001 - Mark Parity<br />
* 5: $E9 11101001 - Space Parity<br />
* Transmit interrupt disabled<br />
Default: 1<br />
<br />
==== Third parameter: ====<br />
Data word length, 5 to 8.<br />
* Default: 8<br />
<br />
==== Fourth parameter: ====<br />
Stop Bits<br />
* 1 = 1 stop bit<br />
* 2 = 2 stop bits<br />
Default: 1<br />
<br />
=== MAPMODE <value> ===<br />
If the value is 0, the Color Computer is set to 0.89 MHz for the entire address space.<br />
If the value is 1, the Color Computer is set to 1.78 MHz speed when reading from ROM, and 0.89 MHz when reading or writing to RAM.<br />
<br />
=== XOR ===<br />
The exclusive or operator is true if 1 (and only 1) input is true, otherwise it is false.<br><br />
This is used in the same sense as AND and OR in if/then statements:<br />
IF A XOR B THEN 40<br />
It is also use like AND and OR in bit wise expressions:<br />
C = A XOR B<br />
<br />
=== ERR ===<br />
Variable that contains the last error number.<br />
<br />
=== ERL ===<br />
Variable that contains the line number where the last error occurred.<br />
<br />
=== TIME ===<br />
Returns the current value for the 24 bit timer (the old Extended BASIC "TIMER" still works as a 16 bit timer).<br><br />
This counter increments 60 times per second and rolls over at 24 hours.<br />
<br />
=== TIME$ ===<br />
Will either return the current 24 hour clock value, or set the 24 hour clock value, using a string format. The string format is "HH:MM:SS", in 24 hour time format, so HH can be 0 to 23, MM can be 0 to 59, and SS can be 0 to 59.<br />
Examples:<br />
A$=TIME$<br />
TIME$="13:25:00"<br />
<br />
=== STRIG(button) ===<br />
This function returns the state of one of the four joystick buttons. Negative 1 if pressed, zero if not pressed.<br><br />
Button numbers 1, 3, 5, 7 return the real time value of the button state. This allows rapid fire with the button held down.<br><br />
* 1 - Left joystick button 1<br />
* 3 - Left joystick button 2<br />
* 5 - Right joystick button 1<br />
* 7 - Right joystick button 2<br />
Button numbers 0, 2, 4, 6 return -1 if the button was pressed since the last time this function was called.<br><br />
It will then return 0 as long as the button is held down. A new button press will be required to get another -1. This is for single shot fire - the user needs to let go and press the button again in order to fire again.<br />
* 0 - Left joystick button 1<br />
* 2 - Left joystick button 2<br />
* 4 - Right joystick button 1<br />
* 6 - Right joystick button 2<br />
<br />
=== INPUT$(count, device) ===<br />
Used to scan an input device and accumulate a string:<br />
10 A$=INPUT$(3,#0)<br />
20 ? A$<br />
Will pause the program and wait for three key presses. They are put into A$. This will support cassette, serial and disk file I/O.<br />
<br />
=== ON ERROR GOTO <line number> ===<br />
BASIC will jump to line number when an error is encountered. ERL and ERR will contain the line number with the error and the numeric error code, respectively.<br />
<br />
== Changed Commands: ==<br />
<br />
The EDIT will now accept a single line number or a range. The command will clear the screen, list the program line/lines and put the cursor at the start of the screen.<br />
<br />
A CLS value of 9 to 255 will cold start the computer. We suspect that this is a bug that should eventually be fixed.<br />
<br />
A CLS value greater than 255 will cause an ?FC error.<br />
<br />
<br />
== Advanced Color BASIC - added ROM vector calls ===<br />
<br />
Like Color BASIC and Disk BASIC, which used Extended indirect addresses to call functions within the ROM’s (like JOYIN, DSKCON, etc.), Advanced Color BASIC seems to reserve from $8000-$8015 for additional calls as well. This allows the routines themselves to move around as the ROM was updated, but calling programs would have a set point to enter them.<br />
<br />
[$8000] - Calls $FB00, which is a 3 entry table of LBRA instructions:<br />
LBRA $FD32<br />
LBRA $FB1A<br />
LBRA $FD92<br />
<br />
[$8002] - Calls $FB09, which is a 1 entry table of LBRA instructions (I assume more would have<br />
been added later)<br />
LBRA $FE16<br />
<br />
[$8004] - ??? (points to $09D4, which is in BASIC’s data area)<br />
<br />
[$8006] - ??? (points to $E968)<br />
<br />
[$8008] - ??? (points to $0ABE, which is in BASIC’s data area)<br />
<br />
[$800A] - ??? (points to $AD15)<br />
<br />
[$800C] - Call $9254, which checks the 6551 initialized flag (>$0A04). If it is 0 (not initialized), it will initialize the 6551 & it’s related variables including 128 byte receive buffer. If not, it just returns.<br />
<br />
[$800E] - ??? (points to $929D)<br />
<br />
[$8010] - ??? (points to $DE28)<br />
<br />
[$8012] - Calls $92E7, which will return a character from the 128 byte RS232 receive buffer, OR wait for an RS232 character to be received if the buffer is empty.<br />
<br />
[$8014] - Calls $92BD, which will transmit a character through the RS232.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Advanced_Color_BASIC_Documentation&diff=10798Advanced Color BASIC Documentation2024-02-19T02:20:42Z<p>Tlindner: /* XOR */</p>
<hr />
<div>== Advanced Color BASIC - New and updated features explained ==<br />
<br />
=== Introduction ===<br />
This document explains the version 0.0.7 of Advanced Color BASIC ROM found late in 2023.<br><br />
It is from Robert Killgus' collection.<br><br />
This is a very early version of the software and eventually became Deluxe Color BASIC.<br />
<br />
=== Allows lowercase characters in keywords. ===<br />
<br />
=== Full screen editor is always available. ===<br />
Hold alternate and arrow keys to move the cursor around.<br />
Alternate and 'I' will insert a space and move the characters after the cursor to the right one space.<br />
Alternate and 'D' will delete the character under the cursor and shift the remaining characters to the left.<br />
Alternate and 'E' will delete the characters after the cursor to the end of the line.<br />
Alternate and ‘H” will move the cursor to the top left corner of the screen.<br />
Right Arrow (without the alternate key) will move the cursor right 9 spaces.<br />
The break key will abort editing and put the cursor at the bottom left of the screen.<br />
Press the enter key to commit an edited line. You do not have to be at the end of a line.<br />
<br />
=== New device number: #-3. ===<br />
Sends and receives data to/from the new serial port.<br />
Uses:<br />
PRINT #-3, "HELLO WORLD"<br />
<br />
=== New device number: #-4 - tbd ===<br />
<br />
=== RAM Disk ===<br />
Drive 4 is a RAM Disk. It has 12 granules available. It is available even if there is no disk cartridge inserted.<br />
<br />
If a disk cartridge is inserted on cold boot, you are presented with a menu option to go to BASIC or "Disk". If you choose "Disk" the equivalent of a DOS command is executed.<br />
<br />
== New commands ==<br />
<br />
=== ERROR <value> ===<br />
Will cause the computer to stop the program and issue the respective error.<br />
<br />
=== RESUME <line number> ===<br />
Resumes a program at line number from the error handler.<br />
<br />
=== WHILE <boolean expression> / WEND ===<br />
This is a loop construct that will execute the statements between WHILE and WEND repeatedly until the boolean expression is false.<br />
<br />
=== TONE channel, toneperiod, amplitude ===<br />
channel: 1-3<br />
toneperiod: 0-4095<br />
amplitude: 0-15<br />
<br />
=== NOISE channel,noiseperiod,amplitude ===<br />
channel: 1-3<br />
noiseperiod: 0-31<br />
amplitude 0-15<br />
<br />
=== ENV param1,param2,param3,param4,param5 ===<br />
TBD 5 numeric parameters 0-65535 allowed <br />
<br />
TONE 1,2048,15 ' start tone 2048 on channel 1 at max volume<br />
NOISE 2,31,15 ' start noise 31 on channel 2 at max volume<br />
NOISE 2,0 ' stop noise on channel 2<br />
TONE 1,0,0 ' stop tone on channel 1<br />
SOUND command unaltered<br />
TBD determine if PLAY command supports 3-voice like N60 BASIC (also by Microsoft) does<br />
<br />
=== CHAIN - tbd. ===<br />
<br />
=== COMMON ===<br />
Restrictive comment. For Example:<br />
10 COMMON This is a comment : PRINT “HELLO WORLD”<br />
The text after the COMMON command will not be executed, but the command after the colon will. This is different from REM<br />
10 REM This is a comment : PRINT “HELLO WORLD”<br />
The REM command will cause everything to be ignored on the whole line.<br />
<br />
=== TERM ===<br />
Executes the ROM based terminal program (the cursor changes from a blinking black one to a blinking blue one to let the user know that they are in terminal mode). Further details on commands within the terminal programming coming soon.<br />
<br />
=== CONFIG ===<br />
Configures the UART Serial port:<br><br />
CONFIG #-3,[1-15],[1-5],[5-8],[1-2]<br><br />
==== First parameter: ====<br />
BAUD<br><br />
* 1 = 50<br />
* 2 = 75<br />
* 3 = 109.92<br />
* 4 = 135.56<br />
* 5 = 150<br />
* 6 = 300<br />
* 7 = 600<br />
* 8 = 1,200<br />
* 9 = 1,800<br />
* 10 = 2,400<br />
* 11 = 3,600<br />
* 12 = 4,800<br />
* 13 = 7,200<br />
* 14 = 9,600<br />
* 15 = 19,200<br />
Default: 6<br />
<br />
==== Second Parameter: ====<br />
Sent to 6551 command register<br><br />
* 1: $09 00001001 - No Parity<br />
* 2: $29 00101001 - Odd Parity<br />
* 3: $69 01101001 - Even Parity<br />
* 4: $A9 10101001 - Mark Parity<br />
* 5: $E9 11101001 - Space Parity<br />
* Transmit interrupt disabled<br />
Default: 1<br />
<br />
==== Third parameter: ====<br />
Data word length, 5 to 8.<br />
* Default: 8<br />
<br />
==== Fourth parameter: ====<br />
Stop Bits<br />
* 1 = 1 stop bit<br />
* 2 = 2 stop bits<br />
Default: 1<br />
<br />
=== MAPMODE <value> ===<br />
If the value is 0, the Color Computer is set to 0.89 MHz for the entire address space.<br />
If the value is 1, the Color Computer is set to 1.78 MHz speed when reading from ROM, and 0.89 MHz when reading or writing to RAM.<br />
<br />
=== XOR ===<br />
The exclusive or operator is true if 1 (and only 1) input is true, otherwise it is false.<br><br />
This is used in the same sense as AND and OR in if/then statements:<br />
IF A XOR B THEN 40<br />
It is also use like AND and OR in bit wise expressions:<br />
C = A XOR B<br />
<br />
=== ERR ===<br />
Variable that contains the last error number.<br />
<br />
=== ERL ===<br />
Variable that contains the line number where the last error occurred.<br />
<br />
=== TIME ===<br />
Returns the current value for the 24 bit timer (the old Extended BASIC "TIMER" still works as a 16 bit timer).<br><br />
This counter increments 60 times per second and rolls over at 24 hours.<br />
<br />
=== TIME$ ===<br />
Will either return the current 24 hour clock value, or set the 24 hour clock value, using a string format. The string format is "HH:MM:SS", in 24 hour time format, so HH can be 0 to 23, MM can be 0 to 59, and SS can be 0 to 59.<br />
Examples:<br />
A$=TIME$<br />
TIME$="13:25:00"<br />
<br />
=== STRIG(button) ===<br />
This function returns the state of one of the four joystick buttons. Negative 1 if pressed, zero if not pressed.<br><br />
Button numbers 1, 3, 5, 7 return the real time value of the button state. This allows rapid fire with the button held down.<br><br />
* 1 - Left joystick button 1<br />
* 3 - Left joystick button 2<br />
* 5 - Right joystick button 1<br />
* 7 - Right joystick button 2<br />
Button numbers 0, 2, 4, 6 return -1 if the button was pressed since the last time this function was called.<br><br />
It will then return 0 as long as the button is held down. A new button press will be required to get another -1. This is for single shot fire - the user needs to let go and press the button again in order to fire again.<br />
* 0 - Left joystick button 1<br />
* 2 - Left joystick button 2<br />
* 4 - Right joystick button 1<br />
* 6 - Right joystick button 2<br />
<br />
=== INPUT$(count, device) ===<br />
Used to scan an input device and accumulate a string:<br />
10 A$=INPUT$(3,#0)<br />
20 ? A$<br />
Will pause the program and wait for three keypresses. They are put into A$.<br />
<br />
=== ON ERROR GOTO <line number> ===<br />
BASIC will jump to line number when an error is encountered. ERL and ERR will contain the line number with the error and the numeric error code, respectively.<br />
<br />
== Changed Commands: ==<br />
<br />
The EDIT will now accept a single line number or a range. The command will clear the screen, list the program line/lines and put the cursor at the start of the screen.<br />
<br />
A CLS value of 9 to 255 will cold start the computer. We suspect that this is a bug that should eventually be fixed.<br />
<br />
A CLS value greater than 255 will cause an ?FC error.<br />
<br />
<br />
== Advanced Color BASIC - added ROM vector calls ===<br />
<br />
Like Color BASIC and Disk BASIC, which used Extended indirect addresses to call functions within the ROM’s (like JOYIN, DSKCON, etc.), Advanced Color BASIC seems to reserve from $8000-$8015 for additional calls as well. This allows the routines themselves to move around as the ROM was updated, but calling programs would have a set point to enter them.<br />
<br />
[$8000] - Calls $FB00, which is a 3 entry table of LBRA instructions:<br />
LBRA $FD32<br />
LBRA $FB1A<br />
LBRA $FD92<br />
<br />
[$8002] - Calls $FB09, which is a 1 entry table of LBRA instructions (I assume more would have<br />
been added later)<br />
LBRA $FE16<br />
<br />
[$8004] - ??? (points to $09D4, which is in BASIC’s data area)<br />
<br />
[$8006] - ??? (points to $E968)<br />
<br />
[$8008] - ??? (points to $0ABE, which is in BASIC’s data area)<br />
<br />
[$800A] - ??? (points to $AD15)<br />
<br />
[$800C] - Call $9254, which checks the 6551 initialized flag (>$0A04). If it is 0 (not initialized), it will initialize the 6551 & it’s related variables including 128 byte receive buffer. If not, it just returns.<br />
<br />
[$800E] - ??? (points to $929D)<br />
<br />
[$8010] - ??? (points to $DE28)<br />
<br />
[$8012] - Calls $92E7, which will return a character from the 128 byte RS232 receive buffer, OR wait for an RS232 character to be received if the buffer is empty.<br />
<br />
[$8014] - Calls $92BD, which will transmit a character through the RS232.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Advanced_Color_BASIC_Documentation&diff=10797Advanced Color BASIC Documentation2024-02-19T02:19:01Z<p>Tlindner: /* First parameter: */</p>
<hr />
<div>== Advanced Color BASIC - New and updated features explained ==<br />
<br />
=== Introduction ===<br />
This document explains the version 0.0.7 of Advanced Color BASIC ROM found late in 2023.<br><br />
It is from Robert Killgus' collection.<br><br />
This is a very early version of the software and eventually became Deluxe Color BASIC.<br />
<br />
=== Allows lowercase characters in keywords. ===<br />
<br />
=== Full screen editor is always available. ===<br />
Hold alternate and arrow keys to move the cursor around.<br />
Alternate and 'I' will insert a space and move the characters after the cursor to the right one space.<br />
Alternate and 'D' will delete the character under the cursor and shift the remaining characters to the left.<br />
Alternate and 'E' will delete the characters after the cursor to the end of the line.<br />
Alternate and ‘H” will move the cursor to the top left corner of the screen.<br />
Right Arrow (without the alternate key) will move the cursor right 9 spaces.<br />
The break key will abort editing and put the cursor at the bottom left of the screen.<br />
Press the enter key to commit an edited line. You do not have to be at the end of a line.<br />
<br />
=== New device number: #-3. ===<br />
Sends and receives data to/from the new serial port.<br />
Uses:<br />
PRINT #-3, "HELLO WORLD"<br />
<br />
=== New device number: #-4 - tbd ===<br />
<br />
=== RAM Disk ===<br />
Drive 4 is a RAM Disk. It has 12 granules available. It is available even if there is no disk cartridge inserted.<br />
<br />
If a disk cartridge is inserted on cold boot, you are presented with a menu option to go to BASIC or "Disk". If you choose "Disk" the equivalent of a DOS command is executed.<br />
<br />
== New commands ==<br />
<br />
=== ERROR <value> ===<br />
Will cause the computer to stop the program and issue the respective error.<br />
<br />
=== RESUME <line number> ===<br />
Resumes a program at line number from the error handler.<br />
<br />
=== WHILE <boolean expression> / WEND ===<br />
This is a loop construct that will execute the statements between WHILE and WEND repeatedly until the boolean expression is false.<br />
<br />
=== TONE channel, toneperiod, amplitude ===<br />
channel: 1-3<br />
toneperiod: 0-4095<br />
amplitude: 0-15<br />
<br />
=== NOISE channel,noiseperiod,amplitude ===<br />
channel: 1-3<br />
noiseperiod: 0-31<br />
amplitude 0-15<br />
<br />
=== ENV param1,param2,param3,param4,param5 ===<br />
TBD 5 numeric parameters 0-65535 allowed <br />
<br />
TONE 1,2048,15 ' start tone 2048 on channel 1 at max volume<br />
NOISE 2,31,15 ' start noise 31 on channel 2 at max volume<br />
NOISE 2,0 ' stop noise on channel 2<br />
TONE 1,0,0 ' stop tone on channel 1<br />
SOUND command unaltered<br />
TBD determine if PLAY command supports 3-voice like N60 BASIC (also by Microsoft) does<br />
<br />
=== CHAIN - tbd. ===<br />
<br />
=== COMMON ===<br />
Restrictive comment. For Example:<br />
10 COMMON This is a comment : PRINT “HELLO WORLD”<br />
The text after the COMMON command will not be executed, but the command after the colon will. This is different from REM<br />
10 REM This is a comment : PRINT “HELLO WORLD”<br />
The REM command will cause everything to be ignored on the whole line.<br />
<br />
=== TERM ===<br />
Executes the ROM based terminal program (the cursor changes from a blinking black one to a blinking blue one to let the user know that they are in terminal mode). Further details on commands within the terminal programming coming soon.<br />
<br />
=== CONFIG ===<br />
Configures the UART Serial port:<br><br />
CONFIG #-3,[1-15],[1-5],[5-8],[1-2]<br><br />
==== First parameter: ====<br />
BAUD<br><br />
* 1 = 50<br />
* 2 = 75<br />
* 3 = 109.92<br />
* 4 = 135.56<br />
* 5 = 150<br />
* 6 = 300<br />
* 7 = 600<br />
* 8 = 1,200<br />
* 9 = 1,800<br />
* 10 = 2,400<br />
* 11 = 3,600<br />
* 12 = 4,800<br />
* 13 = 7,200<br />
* 14 = 9,600<br />
* 15 = 19,200<br />
Default: 6<br />
<br />
==== Second Parameter: ====<br />
Sent to 6551 command register<br><br />
* 1: $09 00001001 - No Parity<br />
* 2: $29 00101001 - Odd Parity<br />
* 3: $69 01101001 - Even Parity<br />
* 4: $A9 10101001 - Mark Parity<br />
* 5: $E9 11101001 - Space Parity<br />
* Transmit interrupt disabled<br />
Default: 1<br />
<br />
==== Third parameter: ====<br />
Data word length, 5 to 8.<br />
* Default: 8<br />
<br />
==== Fourth parameter: ====<br />
Stop Bits<br />
* 1 = 1 stop bit<br />
* 2 = 2 stop bits<br />
Default: 1<br />
<br />
=== MAPMODE <value> ===<br />
If the value is 0, the Color Computer is set to 0.89 MHz for the entire address space.<br />
If the value is 1, the Color Computer is set to 1.78 MHz speed when reading from ROM, and 0.89 MHz when reading or writing to RAM.<br />
<br />
=== XOR ===<br />
The exclusive or operator is true if 1 (and only 1) input is true, otherwise it is false.<br />
This is used in the same sense as AND and OR in if/then statements:<br />
IF A XOR B THEN 40<br />
It is also use like AND and OR in bitwise expressions:<br />
C = A XOR B<br />
<br />
=== ERR ===<br />
Variable that contains the last error number.<br />
<br />
=== ERL ===<br />
Variable that contains the line number where the last error occurred.<br />
<br />
=== TIME ===<br />
Returns the current value for the 24 bit timer (the old Extended BASIC "TIMER" still works as a 16 bit timer).<br><br />
This counter increments 60 times per second and rolls over at 24 hours.<br />
<br />
=== TIME$ ===<br />
Will either return the current 24 hour clock value, or set the 24 hour clock value, using a string format. The string format is "HH:MM:SS", in 24 hour time format, so HH can be 0 to 23, MM can be 0 to 59, and SS can be 0 to 59.<br />
Examples:<br />
A$=TIME$<br />
TIME$="13:25:00"<br />
<br />
=== STRIG(button) ===<br />
This function returns the state of one of the four joystick buttons. Negative 1 if pressed, zero if not pressed.<br><br />
Button numbers 1, 3, 5, 7 return the real time value of the button state. This allows rapid fire with the button held down.<br><br />
* 1 - Left joystick button 1<br />
* 3 - Left joystick button 2<br />
* 5 - Right joystick button 1<br />
* 7 - Right joystick button 2<br />
Button numbers 0, 2, 4, 6 return -1 if the button was pressed since the last time this function was called.<br><br />
It will then return 0 as long as the button is held down. A new button press will be required to get another -1. This is for single shot fire - the user needs to let go and press the button again in order to fire again.<br />
* 0 - Left joystick button 1<br />
* 2 - Left joystick button 2<br />
* 4 - Right joystick button 1<br />
* 6 - Right joystick button 2<br />
<br />
=== INPUT$(count, device) ===<br />
Used to scan an input device and accumulate a string:<br />
10 A$=INPUT$(3,#0)<br />
20 ? A$<br />
Will pause the program and wait for three keypresses. They are put into A$.<br />
<br />
=== ON ERROR GOTO <line number> ===<br />
BASIC will jump to line number when an error is encountered. ERL and ERR will contain the line number with the error and the numeric error code, respectively.<br />
<br />
== Changed Commands: ==<br />
<br />
The EDIT will now accept a single line number or a range. The command will clear the screen, list the program line/lines and put the cursor at the start of the screen.<br />
<br />
A CLS value of 9 to 255 will cold start the computer. We suspect that this is a bug that should eventually be fixed.<br />
<br />
A CLS value greater than 255 will cause an ?FC error.<br />
<br />
<br />
== Advanced Color BASIC - added ROM vector calls ===<br />
<br />
Like Color BASIC and Disk BASIC, which used Extended indirect addresses to call functions within the ROM’s (like JOYIN, DSKCON, etc.), Advanced Color BASIC seems to reserve from $8000-$8015 for additional calls as well. This allows the routines themselves to move around as the ROM was updated, but calling programs would have a set point to enter them.<br />
<br />
[$8000] - Calls $FB00, which is a 3 entry table of LBRA instructions:<br />
LBRA $FD32<br />
LBRA $FB1A<br />
LBRA $FD92<br />
<br />
[$8002] - Calls $FB09, which is a 1 entry table of LBRA instructions (I assume more would have<br />
been added later)<br />
LBRA $FE16<br />
<br />
[$8004] - ??? (points to $09D4, which is in BASIC’s data area)<br />
<br />
[$8006] - ??? (points to $E968)<br />
<br />
[$8008] - ??? (points to $0ABE, which is in BASIC’s data area)<br />
<br />
[$800A] - ??? (points to $AD15)<br />
<br />
[$800C] - Call $9254, which checks the 6551 initialized flag (>$0A04). If it is 0 (not initialized), it will initialize the 6551 & it’s related variables including 128 byte receive buffer. If not, it just returns.<br />
<br />
[$800E] - ??? (points to $929D)<br />
<br />
[$8010] - ??? (points to $DE28)<br />
<br />
[$8012] - Calls $92E7, which will return a character from the 128 byte RS232 receive buffer, OR wait for an RS232 character to be received if the buffer is empty.<br />
<br />
[$8014] - Calls $92BD, which will transmit a character through the RS232.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Advanced_Color_BASIC_Documentation&diff=10796Advanced Color BASIC Documentation2024-02-19T02:17:12Z<p>Tlindner: /* TIME */</p>
<hr />
<div>== Advanced Color BASIC - New and updated features explained ==<br />
<br />
=== Introduction ===<br />
This document explains the version 0.0.7 of Advanced Color BASIC ROM found late in 2023.<br><br />
It is from Robert Killgus' collection.<br><br />
This is a very early version of the software and eventually became Deluxe Color BASIC.<br />
<br />
=== Allows lowercase characters in keywords. ===<br />
<br />
=== Full screen editor is always available. ===<br />
Hold alternate and arrow keys to move the cursor around.<br />
Alternate and 'I' will insert a space and move the characters after the cursor to the right one space.<br />
Alternate and 'D' will delete the character under the cursor and shift the remaining characters to the left.<br />
Alternate and 'E' will delete the characters after the cursor to the end of the line.<br />
Alternate and ‘H” will move the cursor to the top left corner of the screen.<br />
Right Arrow (without the alternate key) will move the cursor right 9 spaces.<br />
The break key will abort editing and put the cursor at the bottom left of the screen.<br />
Press the enter key to commit an edited line. You do not have to be at the end of a line.<br />
<br />
=== New device number: #-3. ===<br />
Sends and receives data to/from the new serial port.<br />
Uses:<br />
PRINT #-3, "HELLO WORLD"<br />
<br />
=== New device number: #-4 - tbd ===<br />
<br />
=== RAM Disk ===<br />
Drive 4 is a RAM Disk. It has 12 granules available. It is available even if there is no disk cartridge inserted.<br />
<br />
If a disk cartridge is inserted on cold boot, you are presented with a menu option to go to BASIC or "Disk". If you choose "Disk" the equivalent of a DOS command is executed.<br />
<br />
== New commands ==<br />
<br />
=== ERROR <value> ===<br />
Will cause the computer to stop the program and issue the respective error.<br />
<br />
=== RESUME <line number> ===<br />
Resumes a program at line number from the error handler.<br />
<br />
=== WHILE <boolean expression> / WEND ===<br />
This is a loop construct that will execute the statements between WHILE and WEND repeatedly until the boolean expression is false.<br />
<br />
=== TONE channel, toneperiod, amplitude ===<br />
channel: 1-3<br />
toneperiod: 0-4095<br />
amplitude: 0-15<br />
<br />
=== NOISE channel,noiseperiod,amplitude ===<br />
channel: 1-3<br />
noiseperiod: 0-31<br />
amplitude 0-15<br />
<br />
=== ENV param1,param2,param3,param4,param5 ===<br />
TBD 5 numeric parameters 0-65535 allowed <br />
<br />
TONE 1,2048,15 ' start tone 2048 on channel 1 at max volume<br />
NOISE 2,31,15 ' start noise 31 on channel 2 at max volume<br />
NOISE 2,0 ' stop noise on channel 2<br />
TONE 1,0,0 ' stop tone on channel 1<br />
SOUND command unaltered<br />
TBD determine if PLAY command supports 3-voice like N60 BASIC (also by Microsoft) does<br />
<br />
=== CHAIN - tbd. ===<br />
<br />
=== COMMON ===<br />
Restrictive comment. For Example:<br />
10 COMMON This is a comment : PRINT “HELLO WORLD”<br />
The text after the COMMON command will not be executed, but the command after the colon will. This is different from REM<br />
10 REM This is a comment : PRINT “HELLO WORLD”<br />
The REM command will cause everything to be ignored on the whole line.<br />
<br />
=== TERM ===<br />
Executes the ROM based terminal program (the cursor changes from a blinking black one to a blinking blue one to let the user know that they are in terminal mode). Further details on commands within the terminal programming coming soon.<br />
<br />
=== CONFIG ===<br />
Configures the UART Serial port:<br><br />
CONFIG #-3,[1-15],[1-5],[5-8],[1-2]<br><br />
==== First parameter: ====<br />
BAUD<br><br />
* 1 = 50<br />
* 2 = 75<br />
* 3 = 109.92<br />
* 4 = 135.56<br />
* 5 = 150<br />
* 6 = 300<br />
* 7 = 600<br />
* 8 = 1200<br />
* 9 = 1800<br />
* 10 = 2400<br />
* 11 = 3600<br />
* 12 = 4800<br />
* 13 = 7200<br />
* 14 = 9600<br />
* 15 = 19,200<br />
Default: 6<br />
<br />
==== Second Parameter: ====<br />
Sent to 6551 command register<br><br />
* 1: $09 00001001 - No Parity<br />
* 2: $29 00101001 - Odd Parity<br />
* 3: $69 01101001 - Even Parity<br />
* 4: $A9 10101001 - Mark Parity<br />
* 5: $E9 11101001 - Space Parity<br />
* Transmit interrupt disabled<br />
Default: 1<br />
<br />
==== Third parameter: ====<br />
Data word length, 5 to 8.<br />
* Default: 8<br />
<br />
==== Fourth parameter: ====<br />
Stop Bits<br />
* 1 = 1 stop bit<br />
* 2 = 2 stop bits<br />
Default: 1<br />
<br />
=== MAPMODE <value> ===<br />
If the value is 0, the Color Computer is set to 0.89 MHz for the entire address space.<br />
If the value is 1, the Color Computer is set to 1.78 MHz speed when reading from ROM, and 0.89 MHz when reading or writing to RAM.<br />
<br />
=== XOR ===<br />
The exclusive or operator is true if 1 (and only 1) input is true, otherwise it is false.<br />
This is used in the same sense as AND and OR in if/then statements:<br />
IF A XOR B THEN 40<br />
It is also use like AND and OR in bitwise expressions:<br />
C = A XOR B<br />
<br />
=== ERR ===<br />
Variable that contains the last error number.<br />
<br />
=== ERL ===<br />
Variable that contains the line number where the last error occurred.<br />
<br />
=== TIME ===<br />
Returns the current value for the 24 bit timer (the old Extended BASIC "TIMER" still works as a 16 bit timer).<br><br />
This counter increments 60 times per second and rolls over at 24 hours.<br />
<br />
=== TIME$ ===<br />
Will either return the current 24 hour clock value, or set the 24 hour clock value, using a string format. The string format is "HH:MM:SS", in 24 hour time format, so HH can be 0 to 23, MM can be 0 to 59, and SS can be 0 to 59.<br />
Examples:<br />
A$=TIME$<br />
TIME$="13:25:00"<br />
<br />
=== STRIG(button) ===<br />
This function returns the state of one of the four joystick buttons. Negative 1 if pressed, zero if not pressed.<br><br />
Button numbers 1, 3, 5, 7 return the real time value of the button state. This allows rapid fire with the button held down.<br><br />
* 1 - Left joystick button 1<br />
* 3 - Left joystick button 2<br />
* 5 - Right joystick button 1<br />
* 7 - Right joystick button 2<br />
Button numbers 0, 2, 4, 6 return -1 if the button was pressed since the last time this function was called.<br><br />
It will then return 0 as long as the button is held down. A new button press will be required to get another -1. This is for single shot fire - the user needs to let go and press the button again in order to fire again.<br />
* 0 - Left joystick button 1<br />
* 2 - Left joystick button 2<br />
* 4 - Right joystick button 1<br />
* 6 - Right joystick button 2<br />
<br />
=== INPUT$(count, device) ===<br />
Used to scan an input device and accumulate a string:<br />
10 A$=INPUT$(3,#0)<br />
20 ? A$<br />
Will pause the program and wait for three keypresses. They are put into A$.<br />
<br />
=== ON ERROR GOTO <line number> ===<br />
BASIC will jump to line number when an error is encountered. ERL and ERR will contain the line number with the error and the numeric error code, respectively.<br />
<br />
== Changed Commands: ==<br />
<br />
The EDIT will now accept a single line number or a range. The command will clear the screen, list the program line/lines and put the cursor at the start of the screen.<br />
<br />
A CLS value of 9 to 255 will cold start the computer. We suspect that this is a bug that should eventually be fixed.<br />
<br />
A CLS value greater than 255 will cause an ?FC error.<br />
<br />
<br />
== Advanced Color BASIC - added ROM vector calls ===<br />
<br />
Like Color BASIC and Disk BASIC, which used Extended indirect addresses to call functions within the ROM’s (like JOYIN, DSKCON, etc.), Advanced Color BASIC seems to reserve from $8000-$8015 for additional calls as well. This allows the routines themselves to move around as the ROM was updated, but calling programs would have a set point to enter them.<br />
<br />
[$8000] - Calls $FB00, which is a 3 entry table of LBRA instructions:<br />
LBRA $FD32<br />
LBRA $FB1A<br />
LBRA $FD92<br />
<br />
[$8002] - Calls $FB09, which is a 1 entry table of LBRA instructions (I assume more would have<br />
been added later)<br />
LBRA $FE16<br />
<br />
[$8004] - ??? (points to $09D4, which is in BASIC’s data area)<br />
<br />
[$8006] - ??? (points to $E968)<br />
<br />
[$8008] - ??? (points to $0ABE, which is in BASIC’s data area)<br />
<br />
[$800A] - ??? (points to $AD15)<br />
<br />
[$800C] - Call $9254, which checks the 6551 initialized flag (>$0A04). If it is 0 (not initialized), it will initialize the 6551 & it’s related variables including 128 byte receive buffer. If not, it just returns.<br />
<br />
[$800E] - ??? (points to $929D)<br />
<br />
[$8010] - ??? (points to $DE28)<br />
<br />
[$8012] - Calls $92E7, which will return a character from the 128 byte RS232 receive buffer, OR wait for an RS232 character to be received if the buffer is empty.<br />
<br />
[$8014] - Calls $92BD, which will transmit a character through the RS232.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Deluxe_Color_Computer&diff=10795Deluxe Color Computer2024-02-19T01:00:26Z<p>Tlindner: /* Hardware */</p>
<hr />
<div>= Deluxe Color Computer =<br />
<br />
== Pre-Production Boards ==<br />
<br />
Three pre-production (PP) boards for the canceled Deluxe Color Computer exist:<br />
* Boisy Pitre has gathered two of the Deluxe pre-production boards, one from John Prickett and one from Greg Zumwalt which did not have Advanced or Deluxe ROMs.<br />
* Brian Weiseler has Robert Kilgus' Deluxe with Advanced Color BASIC 00.00.07 ROMs intact<br />
<br />
== Hardware ==<br />
<br />
The Deluxe Color Computer upgrades the [[Color Computer 2]] to include new hardware and software features<br />
* Motorola 6847 T1 Video Display Generator (VDG) with true lowercase and lowercase descender characters<br />
* General Instruments AY-3-8913 Programmable Sound Generator the same as [[Speech/Sound Cartridge (26-3144A)]], [[Symphony-12]], [[Philharmonic-12]], or [[CoCo PSG]]<br />
* American Megatrends (AMI) S6551P Asynchronous Communication Interface Adapter (ACIA) the same as used in the [[Deluxe RS232 Pak]]<br />
* Additional circuitry for 60Hz timer interrupts<br />
* Additional color burst control<br />
* Additional address decoding to make the PSG and S6551 into the CoCo memory map<br />
==== Memory Map ====<br />
* $FF00 - $FF1F - PIA 0<br />
* $FF20 - $FF2F - PIA 1<br />
* $FF30 - Option Control Register<br />
{| class="wikitable"<br />
|+ Option Control Register Description<br />
|-<br />
! Bit Position!! Function <br />
|-<br />
| 0|| A14<br />
|-<br />
| 1|| A15<br />
|-<br />
| 2|| Enable above for RAM range: $4000-$7FFF<br />
|-<br />
| 3|| Alternate color set (blue / green alpha display)<br />
|-<br />
| 4|| N/A<br />
|-<br />
| 5|| N/A<br />
|-<br />
| 6|| Enable 60Hz interrupt<br />
|-<br />
| 7|| Enable cartridge select: 1 internal / 0 external<br />
|}<br />
* $FF38 AY-3-8910 Data register<br />
* $FF39 AY-3-8910 Control Register Latch<br />
* $FF3C SY6551 Transmit / Receive Register<br />
* $FF3D SY6551 Read status registers<br />
* $FF3E SY6551 Command register<br />
* $FF3F SY6551 Control Register<br />
<br />
== Software ==<br />
<br />
The Deluxe Color Computer contains an upgraded Color BASIC which merges Color BASIC, Extended Color BASIC, and Disk Extended Color BASIC into a single 32K Advanced Color BASIC ROM image.<br />
<br />
Advanced Color BASIC includes a number of new features as well:<br />
* [[Advanced Color BASIC Documentation]]</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Deluxe_Color_Computer&diff=10794Deluxe Color Computer2024-02-19T00:59:49Z<p>Tlindner: /* Hardware */</p>
<hr />
<div>= Deluxe Color Computer =<br />
<br />
== Pre-Production Boards ==<br />
<br />
Three pre-production (PP) boards for the canceled Deluxe Color Computer exist:<br />
* Boisy Pitre has gathered two of the Deluxe pre-production boards, one from John Prickett and one from Greg Zumwalt which did not have Advanced or Deluxe ROMs.<br />
* Brian Weiseler has Robert Kilgus' Deluxe with Advanced Color BASIC 00.00.07 ROMs intact<br />
<br />
== Hardware ==<br />
<br />
The Deluxe Color Computer upgrades the [[Color Computer 2]] to include new hardware and software features<br />
* Motorola 6847 T1 Video Display Generator (VDG) with true lowercase and lowercase descender characters<br />
* General Instruments AY-3-8913 Programmable Sound Generator the same as [[Speech/Sound Cartridge (26-3144A)]], [[Symphony-12]], [[Philharmonic-12]], or [[CoCo PSG]]<br />
* American Megatrends (AMI) S6551P Asynchronous Communication Interface Adapter (ACIA) the same as used in the [[Deluxe RS232 Pak]]<br />
* Additional circuitry for 60Hz timer interrupts<br />
* Additional color burst control<br />
* Additional address decoding to make the PSG and S6551 into the CoCo memory map<br />
<br><br />
* $FF00 - $FF1F - PIA 0<br />
* $FF20 - $FF2F - PIA 1<br />
* $FF30 - Option Control Register<br />
{| class="wikitable"<br />
|+ Option Control Register Description<br />
|-<br />
! Bit Position!! Function <br />
|-<br />
| 0|| A14<br />
|-<br />
| 1|| A15<br />
|-<br />
| 2|| Enable above for RAM range: $4000-$7FFF<br />
|-<br />
| 3|| Alternate color set (blue / green alpha display)<br />
|-<br />
| 4|| N/A<br />
|-<br />
| 5|| N/A<br />
|-<br />
| 6|| Enable 60Hz interrupt<br />
|-<br />
| 7|| Enable cartridge select: 1 internal / 0 external<br />
|}<br />
* $FF38 AY-3-8910 Data register<br />
* $FF39 AY-3-8910 Control Register Latch<br />
* $FF3C SY6551 Transmit / Receive Register<br />
* $FF3D SY6551 Read status registers<br />
* $FF3E SY6551 Command register<br />
* $FF3F SY6551 Control Register<br />
<br />
== Software ==<br />
<br />
The Deluxe Color Computer contains an upgraded Color BASIC which merges Color BASIC, Extended Color BASIC, and Disk Extended Color BASIC into a single 32K Advanced Color BASIC ROM image.<br />
<br />
Advanced Color BASIC includes a number of new features as well:<br />
* [[Advanced Color BASIC Documentation]]</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Deluxe_Color_Computer&diff=10793Deluxe Color Computer2024-02-19T00:58:45Z<p>Tlindner: /* Hardware */ Add memory map</p>
<hr />
<div>= Deluxe Color Computer =<br />
<br />
== Pre-Production Boards ==<br />
<br />
Three pre-production (PP) boards for the canceled Deluxe Color Computer exist:<br />
* Boisy Pitre has gathered two of the Deluxe pre-production boards, one from John Prickett and one from Greg Zumwalt which did not have Advanced or Deluxe ROMs.<br />
* Brian Weiseler has Robert Kilgus' Deluxe with Advanced Color BASIC 00.00.07 ROMs intact<br />
<br />
== Hardware ==<br />
<br />
The Deluxe Color Computer upgrades the [[Color Computer 2]] to include new hardware and software features<br />
* Motorola 6847 T1 Video Display Generator (VDG) with true lowercase and lowercase descender characters<br />
* General Instruments AY-3-8913 Programmable Sound Generator the same as [[Speech/Sound Cartridge (26-3144A)]], [[Symphony-12]], [[Philharmonic-12]], or [[CoCo PSG]]<br />
* American Megatrends (AMI) S6551P Asynchronous Communication Interface Adapter (ACIA) the same as used in the [[Deluxe RS232 Pak]]<br />
* Additional circuitry for 60Hz timer interrupts<br />
* Additional color burst control<br />
* Additional address decoding to make the PSG and S6551 into the CoCo memory map<br />
<br><br />
* $FF00 - $FF1F - PIA 0<br />
* $FF20 - $FF2F - PIA 1<br />
* $FF30 - Option Control Register<br />
{| class="wikitable"<br />
|+ Option Control Register Description<br />
|-<br />
! Bit Position!! Function <br />
|-<br />
| 0|| A15<br />
|-<br />
| 1|| A14<br />
|-<br />
| 2|| Enable above for RAM range: $4000-$7FFF<br />
|-<br />
| 3|| Alternate color set (blue / green alpha display)<br />
|-<br />
| 4|| N/A<br />
|-<br />
| 5|| N/A<br />
|-<br />
| 6|| Enable 60Hz interrupt<br />
|-<br />
| 7|| Enable cartridge select: 1 internal / 0 external<br />
|}<br />
* $FF38 AY-3-8910 Data register<br />
* $FF39 AY-3-8910 Control Register Latch<br />
* $FF3C SY6551 Transmit / Receive Register<br />
* $FF3D SY6551 Read status registers<br />
* $FF3E SY6551 Command register<br />
* $FF3F SY6551 Control Register<br />
<br />
== Software ==<br />
<br />
The Deluxe Color Computer contains an upgraded Color BASIC which merges Color BASIC, Extended Color BASIC, and Disk Extended Color BASIC into a single 32K Advanced Color BASIC ROM image.<br />
<br />
Advanced Color BASIC includes a number of new features as well:<br />
* [[Advanced Color BASIC Documentation]]</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Advanced_Color_BASIC_Documentation&diff=10788Advanced Color BASIC Documentation2024-02-19T00:28:57Z<p>Tlindner: /* First parameter: */</p>
<hr />
<div>== Advanced Color BASIC - New and updated features explained ==<br />
<br />
=== Introduction ===<br />
This document explains the version 0.0.7 of Advanced Color BASIC ROM found late in 2023.<br><br />
It is from Robert Killgus' collection.<br><br />
This is a very early version of the software and eventually became Deluxe Color BASIC.<br />
<br />
=== Allows lowercase characters in keywords. ===<br />
<br />
=== Full screen editor is always available. ===<br />
Hold alternate and arrow keys to move the cursor around.<br />
Alternate and 'I' will insert a space and move the characters after the cursor to the right one space.<br />
Alternate and 'D' will delete the character under the cursor and shift the remaining characters to the left.<br />
Alternate and 'E' will delete the characters after the cursor to the end of the line.<br />
Alternate and ‘H” will move the cursor to the top left corner of the screen.<br />
Right Arrow (without the alternate key) will move the cursor right 9 spaces.<br />
The break key will abort editing and put the cursor at the bottom left of the screen.<br />
Press the enter key to commit an edited line. You do not have to be at the end of a line.<br />
<br />
=== New device number: #-3. ===<br />
Sends and receives data to/from the new serial port.<br />
Uses:<br />
PRINT #-3, "HELLO WORLD"<br />
<br />
=== New device number: #-4 - tbd ===<br />
<br />
=== RAM Disk ===<br />
Drive 4 is a RAM Disk. It has 12 granules available. It is available even if there is no disk cartridge inserted.<br />
<br />
If a disk cartridge is inserted on cold boot, you are presented with a menu option to go to BASIC or "Disk". If you choose "Disk" the equivalent of a DOS command is executed.<br />
<br />
== New commands ==<br />
<br />
=== ERROR <value> ===<br />
Will cause the computer to stop the program and issue the respective error.<br />
<br />
=== RESUME <line number> ===<br />
Resumes a program at line number from the error handler.<br />
<br />
=== WHILE <boolean expression> / WEND ===<br />
This is a loop construct that will execute the statements between WHILE and WEND repeatedly until the boolean expression is false.<br />
<br />
=== TONE channel, toneperiod, amplitude ===<br />
channel: 1-3<br />
toneperiod: 0-4095<br />
amplitude: 0-15<br />
<br />
=== NOISE channel,noiseperiod,amplitude ===<br />
channel: 1-3<br />
noiseperiod: 0-31<br />
amplitude 0-15<br />
<br />
=== ENV param1,param2,param3,param4,param5 ===<br />
TBD 5 numeric parameters 0-65535 allowed <br />
<br />
TONE 1,2048,15 ' start tone 2048 on channel 1 at max volume<br />
NOISE 2,31,15 ' start noise 31 on channel 2 at max volume<br />
NOISE 2,0 ' stop noise on channel 2<br />
TONE 1,0,0 ' stop tone on channel 1<br />
SOUND command unaltered<br />
TBD determine if PLAY command supports 3-voice like N60 BASIC (also by Microsoft) does<br />
<br />
=== CHAIN - tbd. ===<br />
<br />
=== COMMON ===<br />
Restrictive comment. For Example:<br />
10 COMMON This is a comment : PRINT “HELLO WORLD”<br />
The text after the COMMON command will not be executed, but the command after the colon will. This is different from REM<br />
10 REM This is a comment : PRINT “HELLO WORLD”<br />
The REM command will cause everything to be ignored on the whole line.<br />
<br />
=== TERM ===<br />
Executes the ROM based terminal program (the cursor changes from a blinking black one to a blinking blue one to let the user know that they are in terminal mode). Further details on commands within the terminal programming coming soon.<br />
<br />
=== CONFIG ===<br />
Configures the UART Serial port:<br><br />
CONFIG #-3,[1-15],[1-5],[5-8],[1-2]<br><br />
==== First parameter: ====<br />
BAUD<br><br />
* 1 = 50<br />
* 2 = 75<br />
* 3 = 109.92<br />
* 4 = 135.56<br />
* 5 = 150<br />
* 6 = 300<br />
* 7 = 600<br />
* 8 = 1200<br />
* 9 = 1800<br />
* 10 = 2400<br />
* 11 = 3600<br />
* 12 = 4800<br />
* 13 = 7200<br />
* 14 = 9600<br />
* 15 = 19,200<br />
Default: 6<br />
<br />
==== Second Parameter: ====<br />
Sent to 6551 command register<br><br />
* 1: $09 00001001 - No Parity<br />
* 2: $29 00101001 - Odd Parity<br />
* 3: $69 01101001 - Even Parity<br />
* 4: $A9 10101001 - Mark Parity<br />
* 5: $E9 11101001 - Space Parity<br />
* Transmit interrupt disabled<br />
Default: 1<br />
<br />
==== Third parameter: ====<br />
Data word length, 5 to 8.<br />
* Default: 8<br />
<br />
==== Fourth parameter: ====<br />
Stop Bits<br />
* 1 = 1 stop bit<br />
* 2 = 2 stop bits<br />
Default: 1<br />
<br />
=== MAPMODE <value> ===<br />
If the value is 0, the Color Computer is set to 0.89 MHz for the entire address space.<br />
If the value is 1, the Color Computer is set to 1.76 MHz speed when reading from ROM, and 0.89 MHz when reading or writing to RAM.<br />
<br />
=== XOR ===<br />
The exclusive or operator is true if 1 (and only 1) input is true, otherwise it is false.<br />
This is used in the same sense as AND and OR in if/then statements:<br />
IF A XOR B THEN 40<br />
It is also use like AND and OR in bitwise expressions:<br />
C = A XOR B<br />
<br />
=== ERR ===<br />
Variable that contains the last error number.<br />
<br />
=== ERL ===<br />
Variable that contains the line number where the last error occurred.<br />
<br />
=== TIME ===<br />
Returns the current value for the 24 bit timer (the old Extended BASIC "TIMER" still works as a 16 bit timer).<br />
<br />
=== TIME$ ===<br />
Will either return the current 24 hour clock value, or set the 24 hour clock value, using a string format. The string format is "HH:MM:SS", in 24 hour time format, so HH can be 0 to 23, MM can be 0 to 59, and SS can be 0 to 59.<br />
Examples:<br />
A$=TIME$<br />
TIME$="13:25:00"<br />
<br />
=== STRIG(button) ===<br />
This function returns the state of one of the four joystick buttons. Negative 1 if pressed, zero if not pressed.<br><br />
Button numbers 1, 3, 5, 7 return the real time value of the button state. This allows rapid fire with the button held down.<br><br />
* 1 - Left joystick button 1<br />
* 3 - Left joystick button 2<br />
* 5 - Right joystick button 1<br />
* 7 - Right joystick button 2<br />
Button numbers 0, 2, 4, 6 return -1 if the button was pressed since the last time this function was called.<br><br />
It will then return 0 as long as the button is held down. A new button press will be required to get another -1. This is for single shot fire - the user needs to let go and press the button again in order to fire again.<br />
* 0 - Left joystick button 1<br />
* 2 - Left joystick button 2<br />
* 4 - Right joystick button 1<br />
* 6 - Right joystick button 2<br />
<br />
=== INPUT$(count, device) ===<br />
Used to scan an input device and accumulate a string:<br />
10 A$=INPUT$(3,#0)<br />
20 ? A$<br />
Will pause the program and wait for three keypresses. They are put into A$.<br />
<br />
=== ON ERROR GOTO <line number> ===<br />
BASIC will jump to line number when an error is encountered. ERL and ERR will contain the line number with the error and the numeric error code, respectively.<br />
<br />
== Changed Commands: ==<br />
<br />
The EDIT will now accept a single line number or a range. The command will clear the screen, list the program line/lines and put the cursor at the start of the screen.<br />
<br />
A CLS value of 9 to 255 will cold start the computer. We suspect that this is a bug that should eventually be fixed.<br />
<br />
A CLS value greater than 255 will cause an ?FC error.<br />
<br />
<br />
== Advanced Color BASIC - added ROM vector calls ===<br />
<br />
Like Color BASIC and Disk BASIC, which used Extended indirect addresses to call functions within the ROM’s (like JOYIN, DSKCON, etc.), Advanced Color BASIC seems to reserve from $8000-$8015 for additional calls as well. This allows the routines themselves to move around as the ROM was updated, but calling programs would have a set point to enter them.<br />
<br />
[$8000] - Calls $FB00, which is a 3 entry table of LBRA instructions:<br />
LBRA $FD32<br />
LBRA $FB1A<br />
LBRA $FD92<br />
<br />
[$8002] - Calls $FB09, which is a 1 entry table of LBRA instructions (I assume more would have<br />
been added later)<br />
LBRA $FE16<br />
<br />
[$8004] - ??? (points to $09D4, which is in BASIC’s data area)<br />
[$8006] - ??? (points to $E968)<br />
[$8008] - ??? (points to $0ABE, which is in BASIC’s data area)<br />
[$800A] - ??? (points to $AD15)<br />
[$800C] - If $0A04=0, initialize the 6551 & it’s related variables including 128 byte receive<br />
buffer (calls $9254)<br />
[$800E] - ??? (points to $929D)<br />
[$8010] - ??? (points to $DE28)<br />
[$8012] - Calls $92E7, which will return a character from the 128 byte RS232 receive buffer,<br />
OR<br />
wait for an RS232 character to be received if the buffer is empty.<br />
[$8014] - Calls $92BD, which will transmit a character through the RS232.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Advanced_Color_BASIC_Documentation&diff=10787Advanced Color BASIC Documentation2024-02-19T00:28:31Z<p>Tlindner: /* CONFIG */ format for wiki</p>
<hr />
<div>== Advanced Color BASIC - New and updated features explained ==<br />
<br />
=== Introduction ===<br />
This document explains the version 0.0.7 of Advanced Color BASIC ROM found late in 2023.<br><br />
It is from Robert Killgus' collection.<br><br />
This is a very early version of the software and eventually became Deluxe Color BASIC.<br />
<br />
=== Allows lowercase characters in keywords. ===<br />
<br />
=== Full screen editor is always available. ===<br />
Hold alternate and arrow keys to move the cursor around.<br />
Alternate and 'I' will insert a space and move the characters after the cursor to the right one space.<br />
Alternate and 'D' will delete the character under the cursor and shift the remaining characters to the left.<br />
Alternate and 'E' will delete the characters after the cursor to the end of the line.<br />
Alternate and ‘H” will move the cursor to the top left corner of the screen.<br />
Right Arrow (without the alternate key) will move the cursor right 9 spaces.<br />
The break key will abort editing and put the cursor at the bottom left of the screen.<br />
Press the enter key to commit an edited line. You do not have to be at the end of a line.<br />
<br />
=== New device number: #-3. ===<br />
Sends and receives data to/from the new serial port.<br />
Uses:<br />
PRINT #-3, "HELLO WORLD"<br />
<br />
=== New device number: #-4 - tbd ===<br />
<br />
=== RAM Disk ===<br />
Drive 4 is a RAM Disk. It has 12 granules available. It is available even if there is no disk cartridge inserted.<br />
<br />
If a disk cartridge is inserted on cold boot, you are presented with a menu option to go to BASIC or "Disk". If you choose "Disk" the equivalent of a DOS command is executed.<br />
<br />
== New commands ==<br />
<br />
=== ERROR <value> ===<br />
Will cause the computer to stop the program and issue the respective error.<br />
<br />
=== RESUME <line number> ===<br />
Resumes a program at line number from the error handler.<br />
<br />
=== WHILE <boolean expression> / WEND ===<br />
This is a loop construct that will execute the statements between WHILE and WEND repeatedly until the boolean expression is false.<br />
<br />
=== TONE channel, toneperiod, amplitude ===<br />
channel: 1-3<br />
toneperiod: 0-4095<br />
amplitude: 0-15<br />
<br />
=== NOISE channel,noiseperiod,amplitude ===<br />
channel: 1-3<br />
noiseperiod: 0-31<br />
amplitude 0-15<br />
<br />
=== ENV param1,param2,param3,param4,param5 ===<br />
TBD 5 numeric parameters 0-65535 allowed <br />
<br />
TONE 1,2048,15 ' start tone 2048 on channel 1 at max volume<br />
NOISE 2,31,15 ' start noise 31 on channel 2 at max volume<br />
NOISE 2,0 ' stop noise on channel 2<br />
TONE 1,0,0 ' stop tone on channel 1<br />
SOUND command unaltered<br />
TBD determine if PLAY command supports 3-voice like N60 BASIC (also by Microsoft) does<br />
<br />
=== CHAIN - tbd. ===<br />
<br />
=== COMMON ===<br />
Restrictive comment. For Example:<br />
10 COMMON This is a comment : PRINT “HELLO WORLD”<br />
The text after the COMMON command will not be executed, but the command after the colon will. This is different from REM<br />
10 REM This is a comment : PRINT “HELLO WORLD”<br />
The REM command will cause everything to be ignored on the whole line.<br />
<br />
=== TERM ===<br />
Executes the ROM based terminal program (the cursor changes from a blinking black one to a blinking blue one to let the user know that they are in terminal mode). Further details on commands within the terminal programming coming soon.<br />
<br />
=== CONFIG ===<br />
Configures the UART Serial port:<br><br />
CONFIG #-3,[1-15],[1-5],[5-8],[1-2]<br><br />
==== First parameter: ====<br />
BAUD<br><br />
* 1 = 50<br />
* 2 = 75<br />
* 3 = 109.92<br />
* 4 = 135.56<br />
* 5 = 150<br />
* 6 = 300<br />
* 7 = 600<br />
* 8 = 1200<br />
* 9 = 1800<br />
* 10 = 2400<br />
* 11 = 3600<br />
* 12 = 4800<br />
* 13 = 7200<br />
* 14 = 9600<br />
* 15 = 19,200<br />
* Default: 6<br />
<br />
==== Second Parameter: ====<br />
Sent to 6551 command register<br><br />
* 1: $09 00001001 - No Parity<br />
* 2: $29 00101001 - Odd Parity<br />
* 3: $69 01101001 - Even Parity<br />
* 4: $A9 10101001 - Mark Parity<br />
* 5: $E9 11101001 - Space Parity<br />
* Transmit interrupt disabled<br />
Default: 1<br />
<br />
==== Third parameter: ====<br />
Data word length, 5 to 8.<br />
* Default: 8<br />
<br />
==== Fourth parameter: ====<br />
Stop Bits<br />
* 1 = 1 stop bit<br />
* 2 = 2 stop bits<br />
Default: 1<br />
<br />
=== MAPMODE <value> ===<br />
If the value is 0, the Color Computer is set to 0.89 MHz for the entire address space.<br />
If the value is 1, the Color Computer is set to 1.76 MHz speed when reading from ROM, and 0.89 MHz when reading or writing to RAM.<br />
<br />
=== XOR ===<br />
The exclusive or operator is true if 1 (and only 1) input is true, otherwise it is false.<br />
This is used in the same sense as AND and OR in if/then statements:<br />
IF A XOR B THEN 40<br />
It is also use like AND and OR in bitwise expressions:<br />
C = A XOR B<br />
<br />
=== ERR ===<br />
Variable that contains the last error number.<br />
<br />
=== ERL ===<br />
Variable that contains the line number where the last error occurred.<br />
<br />
=== TIME ===<br />
Returns the current value for the 24 bit timer (the old Extended BASIC "TIMER" still works as a 16 bit timer).<br />
<br />
=== TIME$ ===<br />
Will either return the current 24 hour clock value, or set the 24 hour clock value, using a string format. The string format is "HH:MM:SS", in 24 hour time format, so HH can be 0 to 23, MM can be 0 to 59, and SS can be 0 to 59.<br />
Examples:<br />
A$=TIME$<br />
TIME$="13:25:00"<br />
<br />
=== STRIG(button) ===<br />
This function returns the state of one of the four joystick buttons. Negative 1 if pressed, zero if not pressed.<br><br />
Button numbers 1, 3, 5, 7 return the real time value of the button state. This allows rapid fire with the button held down.<br><br />
* 1 - Left joystick button 1<br />
* 3 - Left joystick button 2<br />
* 5 - Right joystick button 1<br />
* 7 - Right joystick button 2<br />
Button numbers 0, 2, 4, 6 return -1 if the button was pressed since the last time this function was called.<br><br />
It will then return 0 as long as the button is held down. A new button press will be required to get another -1. This is for single shot fire - the user needs to let go and press the button again in order to fire again.<br />
* 0 - Left joystick button 1<br />
* 2 - Left joystick button 2<br />
* 4 - Right joystick button 1<br />
* 6 - Right joystick button 2<br />
<br />
=== INPUT$(count, device) ===<br />
Used to scan an input device and accumulate a string:<br />
10 A$=INPUT$(3,#0)<br />
20 ? A$<br />
Will pause the program and wait for three keypresses. They are put into A$.<br />
<br />
=== ON ERROR GOTO <line number> ===<br />
BASIC will jump to line number when an error is encountered. ERL and ERR will contain the line number with the error and the numeric error code, respectively.<br />
<br />
== Changed Commands: ==<br />
<br />
The EDIT will now accept a single line number or a range. The command will clear the screen, list the program line/lines and put the cursor at the start of the screen.<br />
<br />
A CLS value of 9 to 255 will cold start the computer. We suspect that this is a bug that should eventually be fixed.<br />
<br />
A CLS value greater than 255 will cause an ?FC error.<br />
<br />
<br />
== Advanced Color BASIC - added ROM vector calls ===<br />
<br />
Like Color BASIC and Disk BASIC, which used Extended indirect addresses to call functions within the ROM’s (like JOYIN, DSKCON, etc.), Advanced Color BASIC seems to reserve from $8000-$8015 for additional calls as well. This allows the routines themselves to move around as the ROM was updated, but calling programs would have a set point to enter them.<br />
<br />
[$8000] - Calls $FB00, which is a 3 entry table of LBRA instructions:<br />
LBRA $FD32<br />
LBRA $FB1A<br />
LBRA $FD92<br />
<br />
[$8002] - Calls $FB09, which is a 1 entry table of LBRA instructions (I assume more would have<br />
been added later)<br />
LBRA $FE16<br />
<br />
[$8004] - ??? (points to $09D4, which is in BASIC’s data area)<br />
[$8006] - ??? (points to $E968)<br />
[$8008] - ??? (points to $0ABE, which is in BASIC’s data area)<br />
[$800A] - ??? (points to $AD15)<br />
[$800C] - If $0A04=0, initialize the 6551 & it’s related variables including 128 byte receive<br />
buffer (calls $9254)<br />
[$800E] - ??? (points to $929D)<br />
[$8010] - ??? (points to $DE28)<br />
[$8012] - Calls $92E7, which will return a character from the 128 byte RS232 receive buffer,<br />
OR<br />
wait for an RS232 character to be received if the buffer is empty.<br />
[$8014] - Calls $92BD, which will transmit a character through the RS232.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Advanced_Color_BASIC_Documentation&diff=10775Advanced Color BASIC Documentation2024-02-18T18:51:58Z<p>Tlindner: /* Introduction */ Add detials.</p>
<hr />
<div>== Advanced Color BASIC - New and updated features explained ==<br />
<br />
=== Introduction ===<br />
This document explains the version 0.0.7 of Advanced Color BASIC ROM found late in 2023.<br><br />
It is from Robert Killgus' collection.<br><br />
This is a very early version of the software and eventually became Deluxe Color BASIC.<br />
<br />
=== Allows lowercase characters in keywords. ===<br />
<br />
=== Full screen editor is always available. ===<br />
Hold alternate and arrow keys to move the cursor around.<br />
Alternate and 'I' will insert a space and move the characters after the cursor to the right one space.<br />
Alternate and 'D' will delete the character under the cursor and shift the remaining characters to the left.<br />
Alternate and 'E' will delete the characters after the cursor to the end of the line.<br />
Alternate and ‘H” will move the cursor to the top left corner of the screen.<br />
Right Arrow (without the alternate key) will move the cursor right 9 spaces.<br />
The break key will abort editing and put the cursor at the bottom left of the screen.<br />
Press the enter key to commit an edited line. You do not have to be at the end of a line.<br />
<br />
=== New device number: #-3. ===<br />
Sends and receives data to/from the new serial port.<br />
Uses:<br />
PRINT #-3, "HELLO WORLD"<br />
<br />
=== New device number: #-4 - tbd ===<br />
<br />
=== RAM Disk ===<br />
Drive 4 is a RAM Disk. It has 12 granules available. It is available even if there is no disk cartridge inserted.<br />
<br />
If a disk cartridge is inserted on cold boot, you are presented with a menu option to go to BASIC or "Disk". If you choose "Disk" the equivalent of a DOS command is executed.<br />
<br />
== New commands ==<br />
<br />
=== ERROR <value> ===<br />
Will cause the computer to stop the program and issue the respective error.<br />
<br />
=== RESUME <line number> ===<br />
Resumes a program at line number from the error handler.<br />
<br />
=== WHILE <boolean expression> / WEND ===<br />
This is a loop construct that will execute the statements between WHILE and WEND repeatedly until the boolean expression is false.<br />
<br />
=== TONE channel, toneperiod, amplitude ===<br />
channel: 1-3<br />
toneperiod: 0-4095<br />
amplitude: 0-15<br />
<br />
=== NOISE channel,noiseperiod,amplitude ===<br />
channel: 1-3<br />
noiseperiod: 0-31<br />
amplitude 0-15<br />
<br />
=== ENV param1,param2,param3,param4,param5 ===<br />
TBD 5 numeric parameters 0-65535 allowed <br />
<br />
TONE 1,2048,15 ' start tone 2048 on channel 1 at max volume<br />
NOISE 2,31,15 ' start noise 31 on channel 2 at max volume<br />
NOISE 2,0 ' stop noise on channel 2<br />
TONE 1,0,0 ' stop tone on channel 1<br />
SOUND command unaltered<br />
TBD determine if PLAY command supports 3-voice like N60 BASIC (also by Microsoft) does<br />
<br />
=== CHAIN - tbd. ===<br />
<br />
=== COMMON ===<br />
Restrictive comment. For Example:<br />
10 COMMON This is a comment : PRINT “HELLO WORLD”<br />
The text after the COMMON command will not be executed, but the command after the colon will. This is different from REM<br />
10 REM This is a comment : PRINT “HELLO WORLD”<br />
The REM command will cause everything to be ignored on the whole line.<br />
<br />
=== TERM - tbd. ===<br />
<br />
=== CONFIG ===<br />
Configures the UART Serial port:<br />
CONFIG #-3,[1-15],[1-5],[5-8],[1-2]<br />
First parameter:<br />
BAUD<br />
1 = 50<br />
2 = 75<br />
3 = 109.92<br />
4 = 135.56<br />
5 = 150<br />
6 = 300<br />
7 = 600<br />
8 = 1200<br />
9 = 1800<br />
10 = 2400<br />
11 = 3600<br />
12 = 4800<br />
13 = 7200<br />
14 = 9600<br />
15 = 19,200<br />
Default: 6<br />
<br />
Second Parameter:<br />
Sent to 6551 command register<br />
1: $09 00001001 - No Parity<br />
2: $29 00101001 - Odd Parity<br />
3: $69 01101001 - Even Parity<br />
4: $A9 10101001 - Mark Parity<br />
5: $E9 11101001 - Space Parity<br />
Transmit interrupt disabled<br />
Default: 1<br />
<br />
Third parameter:<br />
Data word length, 5 to 8.<br />
Default: 8<br />
<br />
Fourth parameter:<br />
Stop Bits<br />
1 = 1 stop bit<br />
2 = 2 stop bits<br />
Default: 1<br />
<br />
=== MAPMODE <value> ===<br />
If the value is 0, the Color Computer is set to 0.89 MHz for the entire address space.<br />
If the value is 1, the Color Computer is set to 1.76 MHz speed when reading from ROM, and 0.89 MHz when reading or writing to RAM.<br />
<br />
=== XOR ===<br />
The exclusive or operator is true if 1 (and only 1) input is true, otherwise it is false.<br />
This is used in the same sense as AND and OR in if/then statements:<br />
IF A XOR B THEN 40<br />
It is also use like AND and OR in bitwise expressions:<br />
C = A XOR B<br />
<br />
=== ERR ===<br />
Variable that contains the last error number.<br />
<br />
=== ERL ===<br />
Variable that contains the line number where the last error occurred.<br />
<br />
=== TIME - tbd ===<br />
<br />
=== TIME$ - tbd ===<br />
<br />
=== STRIG(button) ===<br />
This function returns the state of one of the four joystick buttons. Negative 1 if pressed, zero if not pressed.<br><br />
Button numbers 1, 3, 5, 7 return the real time value of the button state. This allows rapid fire with the button held down.<br><br />
* 1 - Left joystick button 1<br />
* 3 - Left joystick button 2<br />
* 5 - Right joystick button 1<br />
* 7 - Right joystick button 2<br />
Button numbers 0, 2, 4, 6 return -1 if the button was pressed since the last time this function was called.<br><br />
It will then return 0 as long as the button is held down. A new button press will be required to get another -1. This is for single shot fire - the user needs to let go and press the button again in order to fire again.<br />
* 0 - Left joystick button 1<br />
* 2 - Left joystick button 2<br />
* 4 - Right joystick button 1<br />
* 6 - Right joystick button 2<br />
<br />
=== INPUT$(count, device) ===<br />
Used to scan an input device and accumulate a string:<br />
10 A$=INPUT$(3,#0)<br />
20 ? A$<br />
Will pause the program and wait for three keypresses. They are put into A$.<br />
<br />
=== ON ERROR GOTO <line number> ===<br />
BASIC will jump to line number when an error is encountered. ERL and ERR will contain the line number with the error and the numeric error code, respectively.<br />
<br />
== Changed Commands: ==<br />
<br />
The EDIT will now accept a single line number or a range. The command will clear the screen, list the program line/lines and put the cursor at the start of the screen.<br />
<br />
A CLS value of 9 to 255 will cold start the computer. We suspect that this is a bug that should eventually be fixed.<br />
<br />
A CLS value greater than 255 will cause an ?FC error.<br />
<br />
<br />
== Advanced Color BASIC - added ROM vector calls ===<br />
<br />
Like Color BASIC and Disk BASIC, which used Extended indirect addresses to call functions within the ROM’s (like JOYIN, DSKCON, etc.), Advanced Color BASIC seems to reserve from $8000-$8015 for additional calls as well. This allows the routines themselves to move around as the ROM was updated, but calling programs would have a set point to enter them.<br />
[$8000] - Calls $FB00, which is a 3 entry table of LBRA instructions:<br />
LBRA $FD32<br />
LBRA $FB1A<br />
LBRA $FD92<br />
[$8002] - Calls $FB09, which is a 1 entry table of LBRA instructions (I assume more would have<br />
been added later)<br />
LBRA $FE16<br />
[$8004] - ??? (points to $09D4, which is in BASIC’s data area)<br />
[$8006] - ??? (points to $E968)<br />
[$8008] - ??? (points to $0ABE, which is in BASIC’s data area)<br />
[$800A] - ??? (points to $AD15)<br />
[$800C] - If $0A04=0, initialize the 6551 & it’s related variables including 128 byte receive<br />
buffer (calls $9254)<br />
[$800E] - ??? (points to $929D)<br />
[$8010] - ??? (points to $DE28)<br />
[$8012] - Calls $92E7, which will return a character from the 128 byte RS232 receive buffer,<br />
OR<br />
wait for an RS232 character to be received if the buffer is empty.<br />
[$8014] - Calls $92BD, which will transmit a character through the RS232.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Advanced_Color_BASIC_Documentation&diff=10774Advanced Color BASIC Documentation2024-02-18T18:49:41Z<p>Tlindner: /* Advanced Color BASIC - New and updated features explained */</p>
<hr />
<div>== Advanced Color BASIC - New and updated features explained ==<br />
<br />
=== Introduction ===<br />
This document explains the Advanced Color BASIC found late in 2023.<br />
Versioned 0.0.7. It is from Robert Killgus' collection.<br />
<br />
=== Allows lowercase characters in keywords. ===<br />
<br />
=== Full screen editor is always available. ===<br />
Hold alternate and arrow keys to move the cursor around.<br />
Alternate and 'I' will insert a space and move the characters after the cursor to the right one space.<br />
Alternate and 'D' will delete the character under the cursor and shift the remaining characters to the left.<br />
Alternate and 'E' will delete the characters after the cursor to the end of the line.<br />
Alternate and ‘H” will move the cursor to the top left corner of the screen.<br />
Right Arrow (without the alternate key) will move the cursor right 9 spaces.<br />
The break key will abort editing and put the cursor at the bottom left of the screen.<br />
Press the enter key to commit an edited line. You do not have to be at the end of a line.<br />
<br />
=== New device number: #-3. ===<br />
Sends and receives data to/from the new serial port.<br />
Uses:<br />
PRINT #-3, "HELLO WORLD"<br />
<br />
=== New device number: #-4 - tbd ===<br />
<br />
=== RAM Disk ===<br />
Drive 4 is a RAM Disk. It has 12 granules available. It is available even if there is no disk cartridge inserted.<br />
<br />
If a disk cartridge is inserted on cold boot, you are presented with a menu option to go to BASIC or "Disk". If you choose "Disk" the equivalent of a DOS command is executed.<br />
<br />
== New commands ==<br />
<br />
=== ERROR <value> ===<br />
Will cause the computer to stop the program and issue the respective error.<br />
<br />
=== RESUME <line number> ===<br />
Resumes a program at line number from the error handler.<br />
<br />
=== WHILE <boolean expression> / WEND ===<br />
This is a loop construct that will execute the statements between WHILE and WEND repeatedly until the boolean expression is false.<br />
<br />
=== TONE channel, toneperiod, amplitude ===<br />
channel: 1-3<br />
toneperiod: 0-4095<br />
amplitude: 0-15<br />
<br />
=== NOISE channel,noiseperiod,amplitude ===<br />
channel: 1-3<br />
noiseperiod: 0-31<br />
amplitude 0-15<br />
<br />
=== ENV param1,param2,param3,param4,param5 ===<br />
TBD 5 numeric parameters 0-65535 allowed <br />
<br />
TONE 1,2048,15 ' start tone 2048 on channel 1 at max volume<br />
NOISE 2,31,15 ' start noise 31 on channel 2 at max volume<br />
NOISE 2,0 ' stop noise on channel 2<br />
TONE 1,0,0 ' stop tone on channel 1<br />
SOUND command unaltered<br />
TBD determine if PLAY command supports 3-voice like N60 BASIC (also by Microsoft) does<br />
<br />
=== CHAIN - tbd. ===<br />
<br />
=== COMMON ===<br />
Restrictive comment. For Example:<br />
10 COMMON This is a comment : PRINT “HELLO WORLD”<br />
The text after the COMMON command will not be executed, but the command after the colon will. This is different from REM<br />
10 REM This is a comment : PRINT “HELLO WORLD”<br />
The REM command will cause everything to be ignored on the whole line.<br />
<br />
=== TERM - tbd. ===<br />
<br />
=== CONFIG ===<br />
Configures the UART Serial port:<br />
CONFIG #-3,[1-15],[1-5],[5-8],[1-2]<br />
First parameter:<br />
BAUD<br />
1 = 50<br />
2 = 75<br />
3 = 109.92<br />
4 = 135.56<br />
5 = 150<br />
6 = 300<br />
7 = 600<br />
8 = 1200<br />
9 = 1800<br />
10 = 2400<br />
11 = 3600<br />
12 = 4800<br />
13 = 7200<br />
14 = 9600<br />
15 = 19,200<br />
Default: 6<br />
<br />
Second Parameter:<br />
Sent to 6551 command register<br />
1: $09 00001001 - No Parity<br />
2: $29 00101001 - Odd Parity<br />
3: $69 01101001 - Even Parity<br />
4: $A9 10101001 - Mark Parity<br />
5: $E9 11101001 - Space Parity<br />
Transmit interrupt disabled<br />
Default: 1<br />
<br />
Third parameter:<br />
Data word length, 5 to 8.<br />
Default: 8<br />
<br />
Fourth parameter:<br />
Stop Bits<br />
1 = 1 stop bit<br />
2 = 2 stop bits<br />
Default: 1<br />
<br />
=== MAPMODE <value> ===<br />
If the value is 0, the Color Computer is set to 0.89 MHz for the entire address space.<br />
If the value is 1, the Color Computer is set to 1.76 MHz speed when reading from ROM, and 0.89 MHz when reading or writing to RAM.<br />
<br />
=== XOR ===<br />
The exclusive or operator is true if 1 (and only 1) input is true, otherwise it is false.<br />
This is used in the same sense as AND and OR in if/then statements:<br />
IF A XOR B THEN 40<br />
It is also use like AND and OR in bitwise expressions:<br />
C = A XOR B<br />
<br />
=== ERR ===<br />
Variable that contains the last error number.<br />
<br />
=== ERL ===<br />
Variable that contains the line number where the last error occurred.<br />
<br />
=== TIME - tbd ===<br />
<br />
=== TIME$ - tbd ===<br />
<br />
=== STRIG(button) ===<br />
This function returns the state of one of the four joystick buttons. Negative 1 if pressed, zero if not pressed.<br><br />
Button numbers 1, 3, 5, 7 return the real time value of the button state. This allows rapid fire with the button held down.<br><br />
* 1 - Left joystick button 1<br />
* 3 - Left joystick button 2<br />
* 5 - Right joystick button 1<br />
* 7 - Right joystick button 2<br />
Button numbers 0, 2, 4, 6 return -1 if the button was pressed since the last time this function was called.<br><br />
It will then return 0 as long as the button is held down. A new button press will be required to get another -1. This is for single shot fire - the user needs to let go and press the button again in order to fire again.<br />
* 0 - Left joystick button 1<br />
* 2 - Left joystick button 2<br />
* 4 - Right joystick button 1<br />
* 6 - Right joystick button 2<br />
<br />
=== INPUT$(count, device) ===<br />
Used to scan an input device and accumulate a string:<br />
10 A$=INPUT$(3,#0)<br />
20 ? A$<br />
Will pause the program and wait for three keypresses. They are put into A$.<br />
<br />
=== ON ERROR GOTO <line number> ===<br />
BASIC will jump to line number when an error is encountered. ERL and ERR will contain the line number with the error and the numeric error code, respectively.<br />
<br />
== Changed Commands: ==<br />
<br />
The EDIT will now accept a single line number or a range. The command will clear the screen, list the program line/lines and put the cursor at the start of the screen.<br />
<br />
A CLS value of 9 to 255 will cold start the computer. We suspect that this is a bug that should eventually be fixed.<br />
<br />
A CLS value greater than 255 will cause an ?FC error.<br />
<br />
<br />
== Advanced Color BASIC - added ROM vector calls ===<br />
<br />
Like Color BASIC and Disk BASIC, which used Extended indirect addresses to call functions within the ROM’s (like JOYIN, DSKCON, etc.), Advanced Color BASIC seems to reserve from $8000-$8015 for additional calls as well. This allows the routines themselves to move around as the ROM was updated, but calling programs would have a set point to enter them.<br />
[$8000] - Calls $FB00, which is a 3 entry table of LBRA instructions:<br />
LBRA $FD32<br />
LBRA $FB1A<br />
LBRA $FD92<br />
[$8002] - Calls $FB09, which is a 1 entry table of LBRA instructions (I assume more would have<br />
been added later)<br />
LBRA $FE16<br />
[$8004] - ??? (points to $09D4, which is in BASIC’s data area)<br />
[$8006] - ??? (points to $E968)<br />
[$8008] - ??? (points to $0ABE, which is in BASIC’s data area)<br />
[$800A] - ??? (points to $AD15)<br />
[$800C] - If $0A04=0, initialize the 6551 & it’s related variables including 128 byte receive<br />
buffer (calls $9254)<br />
[$800E] - ??? (points to $929D)<br />
[$8010] - ??? (points to $DE28)<br />
[$8012] - Calls $92E7, which will return a character from the 128 byte RS232 receive buffer,<br />
OR<br />
wait for an RS232 character to be received if the buffer is empty.<br />
[$8014] - Calls $92BD, which will transmit a character through the RS232.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Advanced_Color_BASIC_Documentation&diff=10773Advanced Color BASIC Documentation2024-02-18T18:43:38Z<p>Tlindner: Added provenance.</p>
<hr />
<div>== Advanced Color BASIC - New and updated features explained ==<br />
This document explains the Advanced Color BASIC found late in 2023.<br />
Versioned 0.0.7. It is from Robert Killgus' collection.<br />
<br />
=== Allows lowercase characters in keywords. ===<br />
<br />
=== Full screen editor is always available. ===<br />
Hold alternate and arrow keys to move the cursor around.<br />
Alternate and 'I' will insert a space and move the characters after the cursor to the right one space.<br />
Alternate and 'D' will delete the character under the cursor and shift the remaining characters to the left.<br />
Alternate and 'E' will delete the characters after the cursor to the end of the line.<br />
Alternate and ‘H” will move the cursor to the top left corner of the screen.<br />
Right Arrow (without the alternate key) will move the cursor right 9 spaces.<br />
The break key will abort editing and put the cursor at the bottom left of the screen.<br />
Press the enter key to commit an edited line. You do not have to be at the end of a line.<br />
<br />
=== New device number: #-3. ===<br />
Sends and receives data to/from the new serial port.<br />
Uses:<br />
PRINT #-3, "HELLO WORLD"<br />
<br />
=== New device number: #-4 - tbd ===<br />
<br />
=== RAM Disk ===<br />
Drive 4 is a RAM Disk. It has 12 granules available. It is available even if there is no disk cartridge inserted.<br />
<br />
If a disk cartridge is inserted on cold boot, you are presented with a menu option to go to BASIC or "Disk". If you choose "Disk" the equivalent of a DOS command is executed.<br />
<br />
== New commands ==<br />
<br />
=== ERROR <value> ===<br />
Will cause the computer to stop the program and issue the respective error.<br />
<br />
=== RESUME <line number> ===<br />
Resumes a program at line number from the error handler.<br />
<br />
=== WHILE <boolean expression> / WEND ===<br />
This is a loop construct that will execute the statements between WHILE and WEND repeatedly until the boolean expression is false.<br />
<br />
=== TONE channel, toneperiod, amplitude ===<br />
channel: 1-3<br />
toneperiod: 0-4095<br />
amplitude: 0-15<br />
<br />
=== NOISE channel,noiseperiod,amplitude ===<br />
channel: 1-3<br />
noiseperiod: 0-31<br />
amplitude 0-15<br />
<br />
=== ENV param1,param2,param3,param4,param5 ===<br />
TBD 5 numeric parameters 0-65535 allowed <br />
<br />
TONE 1,2048,15 ' start tone 2048 on channel 1 at max volume<br />
NOISE 2,31,15 ' start noise 31 on channel 2 at max volume<br />
NOISE 2,0 ' stop noise on channel 2<br />
TONE 1,0,0 ' stop tone on channel 1<br />
SOUND command unaltered<br />
TBD determine if PLAY command supports 3-voice like N60 BASIC (also by Microsoft) does<br />
<br />
=== CHAIN - tbd. ===<br />
<br />
=== COMMON ===<br />
Restrictive comment. For Example:<br />
10 COMMON This is a comment : PRINT “HELLO WORLD”<br />
The text after the COMMON command will not be executed, but the command after the colon will. This is different from REM<br />
10 REM This is a comment : PRINT “HELLO WORLD”<br />
The REM command will cause everything to be ignored on the whole line.<br />
<br />
=== TERM - tbd. ===<br />
<br />
=== CONFIG ===<br />
Configures the UART Serial port:<br />
CONFIG #-3,[1-15],[1-5],[5-8],[1-2]<br />
First parameter:<br />
BAUD<br />
1 = 50<br />
2 = 75<br />
3 = 109.92<br />
4 = 135.56<br />
5 = 150<br />
6 = 300<br />
7 = 600<br />
8 = 1200<br />
9 = 1800<br />
10 = 2400<br />
11 = 3600<br />
12 = 4800<br />
13 = 7200<br />
14 = 9600<br />
15 = 19,200<br />
Default: 6<br />
<br />
Second Parameter:<br />
Sent to 6551 command register<br />
1: $09 00001001 - No Parity<br />
2: $29 00101001 - Odd Parity<br />
3: $69 01101001 - Even Parity<br />
4: $A9 10101001 - Mark Parity<br />
5: $E9 11101001 - Space Parity<br />
Transmit interrupt disabled<br />
Default: 1<br />
<br />
Third parameter:<br />
Data word length, 5 to 8.<br />
Default: 8<br />
<br />
Fourth parameter:<br />
Stop Bits<br />
1 = 1 stop bit<br />
2 = 2 stop bits<br />
Default: 1<br />
<br />
=== MAPMODE <value> ===<br />
If the value is 0, the Color Computer is set to 0.89 MHz for the entire address space.<br />
If the value is 1, the Color Computer is set to 1.76 MHz speed when reading from ROM, and 0.89 MHz when reading or writing to RAM.<br />
<br />
=== XOR ===<br />
The exclusive or operator is true if 1 (and only 1) input is true, otherwise it is false.<br />
This is used in the same sense as AND and OR in if/then statements:<br />
IF A XOR B THEN 40<br />
It is also use like AND and OR in bitwise expressions:<br />
C = A XOR B<br />
<br />
=== ERR ===<br />
Variable that contains the last error number.<br />
<br />
=== ERL ===<br />
Variable that contains the line number where the last error occurred.<br />
<br />
=== TIME - tbd ===<br />
<br />
=== TIME$ - tbd ===<br />
<br />
=== STRIG(button) ===<br />
This function returns the state of one of the four joystick buttons. Negative 1 if pressed, zero if not pressed.<br><br />
Button numbers 1, 3, 5, 7 return the real time value of the button state. This allows rapid fire with the button held down.<br><br />
* 1 - Left joystick button 1<br />
* 3 - Left joystick button 2<br />
* 5 - Right joystick button 1<br />
* 7 - Right joystick button 2<br />
Button numbers 0, 2, 4, 6 return -1 if the button was pressed since the last time this function was called.<br><br />
It will then return 0 as long as the button is held down. A new button press will be required to get another -1. This is for single shot fire - the user needs to let go and press the button again in order to fire again.<br />
* 0 - Left joystick button 1<br />
* 2 - Left joystick button 2<br />
* 4 - Right joystick button 1<br />
* 6 - Right joystick button 2<br />
<br />
=== INPUT$(count, device) ===<br />
Used to scan an input device and accumulate a string:<br />
10 A$=INPUT$(3,#0)<br />
20 ? A$<br />
Will pause the program and wait for three keypresses. They are put into A$.<br />
<br />
=== ON ERROR GOTO <line number> ===<br />
BASIC will jump to line number when an error is encountered. ERL and ERR will contain the line number with the error and the numeric error code, respectively.<br />
<br />
== Changed Commands: ==<br />
<br />
The EDIT will now accept a single line number or a range. The command will clear the screen, list the program line/lines and put the cursor at the start of the screen.<br />
<br />
A CLS value of 9 to 255 will cold start the computer. We suspect that this is a bug that should eventually be fixed.<br />
<br />
A CLS value greater than 255 will cause an ?FC error.<br />
<br />
<br />
== Advanced Color BASIC - added ROM vector calls ===<br />
<br />
Like Color BASIC and Disk BASIC, which used Extended indirect addresses to call functions within the ROM’s (like JOYIN, DSKCON, etc.), Advanced Color BASIC seems to reserve from $8000-$8015 for additional calls as well. This allows the routines themselves to move around as the ROM was updated, but calling programs would have a set point to enter them.<br />
[$8000] - Calls $FB00, which is a 3 entry table of LBRA instructions:<br />
LBRA $FD32<br />
LBRA $FB1A<br />
LBRA $FD92<br />
[$8002] - Calls $FB09, which is a 1 entry table of LBRA instructions (I assume more would have<br />
been added later)<br />
LBRA $FE16<br />
[$8004] - ??? (points to $09D4, which is in BASIC’s data area)<br />
[$8006] - ??? (points to $E968)<br />
[$8008] - ??? (points to $0ABE, which is in BASIC’s data area)<br />
[$800A] - ??? (points to $AD15)<br />
[$800C] - If $0A04=0, initialize the 6551 & it’s related variables including 128 byte receive<br />
buffer (calls $9254)<br />
[$800E] - ??? (points to $929D)<br />
[$8010] - ??? (points to $DE28)<br />
[$8012] - Calls $92E7, which will return a character from the 128 byte RS232 receive buffer,<br />
OR<br />
wait for an RS232 character to be received if the buffer is empty.<br />
[$8014] - Calls $92BD, which will transmit a character through the RS232.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Advanced_Color_BASIC_Documentation&diff=10771Advanced Color BASIC Documentation2024-02-18T18:40:13Z<p>Tlindner: /* STRIG(button) */</p>
<hr />
<div>== Advanced Color BASIC - New and updated features explained ==<br />
<br />
=== Allows lowercase characters in keywords. ===<br />
<br />
=== Full screen editor is always available. ===<br />
Hold alternate and arrow keys to move the cursor around.<br />
Alternate and 'I' will insert a space and move the characters after the cursor to the right one space.<br />
Alternate and 'D' will delete the character under the cursor and shift the remaining characters to the left.<br />
Alternate and 'E' will delete the characters after the cursor to the end of the line.<br />
Alternate and ‘H” will move the cursor to the top left corner of the screen.<br />
Right Arrow (without the alternate key) will move the cursor right 9 spaces.<br />
The break key will abort editing and put the cursor at the bottom left of the screen.<br />
Press the enter key to commit an edited line. You do not have to be at the end of a line.<br />
<br />
=== New device number: #-3. ===<br />
Sends and receives data to/from the new serial port.<br />
Uses:<br />
PRINT #-3, "HELLO WORLD"<br />
<br />
=== New device number: #-4 - tbd ===<br />
<br />
=== RAM Disk ===<br />
Drive 4 is a RAM Disk. It has 12 granules available. It is available even if there is no disk cartridge inserted.<br />
<br />
If a disk cartridge is inserted on cold boot, you are presented with a menu option to go to BASIC or "Disk". If you choose "Disk" the equivalent of a DOS command is executed.<br />
<br />
== New commands ==<br />
<br />
=== ERROR <value> ===<br />
Will cause the computer to stop the program and issue the respective error.<br />
<br />
=== RESUME <line number> ===<br />
Resumes a program at line number from the error handler.<br />
<br />
=== WHILE <boolean expression> / WEND ===<br />
This is a loop construct that will execute the statements between WHILE and WEND repeatedly until the boolean expression is false.<br />
<br />
=== TONE channel, toneperiod, amplitude ===<br />
channel: 1-3<br />
toneperiod: 0-4095<br />
amplitude: 0-15<br />
<br />
=== NOISE channel,noiseperiod,amplitude ===<br />
channel: 1-3<br />
noiseperiod: 0-31<br />
amplitude 0-15<br />
<br />
=== ENV param1,param2,param3,param4,param5 ===<br />
TBD 5 numeric parameters 0-65535 allowed <br />
<br />
TONE 1,2048,15 ' start tone 2048 on channel 1 at max volume<br />
NOISE 2,31,15 ' start noise 31 on channel 2 at max volume<br />
NOISE 2,0 ' stop noise on channel 2<br />
TONE 1,0,0 ' stop tone on channel 1<br />
SOUND command unaltered<br />
TBD determine if PLAY command supports 3-voice like N60 BASIC (also by Microsoft) does<br />
<br />
=== CHAIN - tbd. ===<br />
<br />
=== COMMON ===<br />
Restrictive comment. For Example:<br />
10 COMMON This is a comment : PRINT “HELLO WORLD”<br />
The text after the COMMON command will not be executed, but the command after the colon will. This is different from REM<br />
10 REM This is a comment : PRINT “HELLO WORLD”<br />
The REM command will cause everything to be ignored on the whole line.<br />
<br />
=== TERM - tbd. ===<br />
<br />
=== CONFIG ===<br />
Configures the UART Serial port:<br />
CONFIG #-3,[1-15],[1-5],[5-8],[1-2]<br />
First parameter:<br />
BAUD<br />
1 = 50<br />
2 = 75<br />
3 = 109.92<br />
4 = 135.56<br />
5 = 150<br />
6 = 300<br />
7 = 600<br />
8 = 1200<br />
9 = 1800<br />
10 = 2400<br />
11 = 3600<br />
12 = 4800<br />
13 = 7200<br />
14 = 9600<br />
15 = 19,200<br />
Default: 6<br />
<br />
Second Parameter:<br />
Sent to 6551 command register<br />
1: $09 00001001 - No Parity<br />
2: $29 00101001 - Odd Parity<br />
3: $69 01101001 - Even Parity<br />
4: $A9 10101001 - Mark Parity<br />
5: $E9 11101001 - Space Parity<br />
Transmit interrupt disabled<br />
Default: 1<br />
<br />
Third parameter:<br />
Data word length, 5 to 8.<br />
Default: 8<br />
<br />
Fourth parameter:<br />
Stop Bits<br />
1 = 1 stop bit<br />
2 = 2 stop bits<br />
Default: 1<br />
<br />
=== MAPMODE <value> ===<br />
If the value is 0, the Color Computer is set to 0.89 MHz for the entire address space.<br />
If the value is 1, the Color Computer is set to 1.76 MHz speed when reading from ROM, and 0.89 MHz when reading or writing to RAM.<br />
<br />
=== XOR ===<br />
The exclusive or operator is true if 1 (and only 1) input is true, otherwise it is false.<br />
This is used in the same sense as AND and OR in if/then statements:<br />
IF A XOR B THEN 40<br />
It is also use like AND and OR in bitwise expressions:<br />
C = A XOR B<br />
<br />
=== ERR ===<br />
Variable that contains the last error number.<br />
<br />
=== ERL ===<br />
Variable that contains the line number where the last error occurred.<br />
<br />
=== TIME - tbd ===<br />
<br />
=== TIME$ - tbd ===<br />
<br />
=== STRIG(button) ===<br />
This function returns the state of one of the four joystick buttons. Negative 1 if pressed, zero if not pressed.<br><br />
Button numbers 1, 3, 5, 7 return the real time value of the button state. This allows rapid fire with the button held down.<br><br />
* 1 - Left joystick button 1<br />
* 3 - Left joystick button 2<br />
* 5 - Right joystick button 1<br />
* 7 - Right joystick button 2<br />
Button numbers 0, 2, 4, 6 return -1 if the button was pressed since the last time this function was called.<br><br />
It will then return 0 as long as the button is held down. A new button press will be required to get another -1. This is for single shot fire - the user needs to let go and press the button again in order to fire again.<br />
* 0 - Left joystick button 1<br />
* 2 - Left joystick button 2<br />
* 4 - Right joystick button 1<br />
* 6 - Right joystick button 2<br />
<br />
=== INPUT$(count, device) ===<br />
Used to scan an input device and accumulate a string:<br />
10 A$=INPUT$(3,#0)<br />
20 ? A$<br />
Will pause the program and wait for three keypresses. They are put into A$.<br />
<br />
=== ON ERROR GOTO <line number> ===<br />
BASIC will jump to line number when an error is encountered. ERL and ERR will contain the line number with the error and the numeric error code, respectively.<br />
<br />
== Changed Commands: ==<br />
<br />
The EDIT will now accept a single line number or a range. The command will clear the screen, list the program line/lines and put the cursor at the start of the screen.<br />
<br />
A CLS value of 9 to 255 will cold start the computer. We suspect that this is a bug that should eventually be fixed.<br />
<br />
A CLS value greater than 255 will cause an ?FC error.<br />
<br />
<br />
== Advanced Color BASIC - added ROM vector calls ===<br />
<br />
Like Color BASIC and Disk BASIC, which used Extended indirect addresses to call functions within the ROM’s (like JOYIN, DSKCON, etc.), Advanced Color BASIC seems to reserve from $8000-$8015 for additional calls as well. This allows the routines themselves to move around as the ROM was updated, but calling programs would have a set point to enter them.<br />
[$8000] - Calls $FB00, which is a 3 entry table of LBRA instructions:<br />
LBRA $FD32<br />
LBRA $FB1A<br />
LBRA $FD92<br />
[$8002] - Calls $FB09, which is a 1 entry table of LBRA instructions (I assume more would have<br />
been added later)<br />
LBRA $FE16<br />
[$8004] - ??? (points to $09D4, which is in BASIC’s data area)<br />
[$8006] - ??? (points to $E968)<br />
[$8008] - ??? (points to $0ABE, which is in BASIC’s data area)<br />
[$800A] - ??? (points to $AD15)<br />
[$800C] - If $0A04=0, initialize the 6551 & it’s related variables including 128 byte receive<br />
buffer (calls $9254)<br />
[$800E] - ??? (points to $929D)<br />
[$8010] - ??? (points to $DE28)<br />
[$8012] - Calls $92E7, which will return a character from the 128 byte RS232 receive buffer,<br />
OR<br />
wait for an RS232 character to be received if the buffer is empty.<br />
[$8014] - Calls $92BD, which will transmit a character through the RS232.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Advanced_Color_BASIC_Documentation&diff=10770Advanced Color BASIC Documentation2024-02-18T18:35:19Z<p>Tlindner: Initial upload</p>
<hr />
<div>== Advanced Color BASIC - New and updated features explained ==<br />
<br />
=== Allows lowercase characters in keywords. ===<br />
<br />
=== Full screen editor is always available. ===<br />
Hold alternate and arrow keys to move the cursor around.<br />
Alternate and 'I' will insert a space and move the characters after the cursor to the right one space.<br />
Alternate and 'D' will delete the character under the cursor and shift the remaining characters to the left.<br />
Alternate and 'E' will delete the characters after the cursor to the end of the line.<br />
Alternate and ‘H” will move the cursor to the top left corner of the screen.<br />
Right Arrow (without the alternate key) will move the cursor right 9 spaces.<br />
The break key will abort editing and put the cursor at the bottom left of the screen.<br />
Press the enter key to commit an edited line. You do not have to be at the end of a line.<br />
<br />
=== New device number: #-3. ===<br />
Sends and receives data to/from the new serial port.<br />
Uses:<br />
PRINT #-3, "HELLO WORLD"<br />
<br />
=== New device number: #-4 - tbd ===<br />
<br />
=== RAM Disk ===<br />
Drive 4 is a RAM Disk. It has 12 granules available. It is available even if there is no disk cartridge inserted.<br />
<br />
If a disk cartridge is inserted on cold boot, you are presented with a menu option to go to BASIC or "Disk". If you choose "Disk" the equivalent of a DOS command is executed.<br />
<br />
== New commands ==<br />
<br />
=== ERROR <value> ===<br />
Will cause the computer to stop the program and issue the respective error.<br />
<br />
=== RESUME <line number> ===<br />
Resumes a program at line number from the error handler.<br />
<br />
=== WHILE <boolean expression> / WEND ===<br />
This is a loop construct that will execute the statements between WHILE and WEND repeatedly until the boolean expression is false.<br />
<br />
=== TONE channel, toneperiod, amplitude ===<br />
channel: 1-3<br />
toneperiod: 0-4095<br />
amplitude: 0-15<br />
<br />
=== NOISE channel,noiseperiod,amplitude ===<br />
channel: 1-3<br />
noiseperiod: 0-31<br />
amplitude 0-15<br />
<br />
=== ENV param1,param2,param3,param4,param5 ===<br />
TBD 5 numeric parameters 0-65535 allowed <br />
<br />
TONE 1,2048,15 ' start tone 2048 on channel 1 at max volume<br />
NOISE 2,31,15 ' start noise 31 on channel 2 at max volume<br />
NOISE 2,0 ' stop noise on channel 2<br />
TONE 1,0,0 ' stop tone on channel 1<br />
SOUND command unaltered<br />
TBD determine if PLAY command supports 3-voice like N60 BASIC (also by Microsoft) does<br />
<br />
=== CHAIN - tbd. ===<br />
<br />
=== COMMON ===<br />
Restrictive comment. For Example:<br />
10 COMMON This is a comment : PRINT “HELLO WORLD”<br />
The text after the COMMON command will not be executed, but the command after the colon will. This is different from REM<br />
10 REM This is a comment : PRINT “HELLO WORLD”<br />
The REM command will cause everything to be ignored on the whole line.<br />
<br />
=== TERM - tbd. ===<br />
<br />
=== CONFIG ===<br />
Configures the UART Serial port:<br />
CONFIG #-3,[1-15],[1-5],[5-8],[1-2]<br />
First parameter:<br />
BAUD<br />
1 = 50<br />
2 = 75<br />
3 = 109.92<br />
4 = 135.56<br />
5 = 150<br />
6 = 300<br />
7 = 600<br />
8 = 1200<br />
9 = 1800<br />
10 = 2400<br />
11 = 3600<br />
12 = 4800<br />
13 = 7200<br />
14 = 9600<br />
15 = 19,200<br />
Default: 6<br />
<br />
Second Parameter:<br />
Sent to 6551 command register<br />
1: $09 00001001 - No Parity<br />
2: $29 00101001 - Odd Parity<br />
3: $69 01101001 - Even Parity<br />
4: $A9 10101001 - Mark Parity<br />
5: $E9 11101001 - Space Parity<br />
Transmit interrupt disabled<br />
Default: 1<br />
<br />
Third parameter:<br />
Data word length, 5 to 8.<br />
Default: 8<br />
<br />
Fourth parameter:<br />
Stop Bits<br />
1 = 1 stop bit<br />
2 = 2 stop bits<br />
Default: 1<br />
<br />
=== MAPMODE <value> ===<br />
If the value is 0, the Color Computer is set to 0.89 MHz for the entire address space.<br />
If the value is 1, the Color Computer is set to 1.76 MHz speed when reading from ROM, and 0.89 MHz when reading or writing to RAM.<br />
<br />
=== XOR ===<br />
The exclusive or operator is true if 1 (and only 1) input is true, otherwise it is false.<br />
This is used in the same sense as AND and OR in if/then statements:<br />
IF A XOR B THEN 40<br />
It is also use like AND and OR in bitwise expressions:<br />
C = A XOR B<br />
<br />
=== ERR ===<br />
Variable that contains the last error number.<br />
<br />
=== ERL ===<br />
Variable that contains the line number where the last error occurred.<br />
<br />
=== TIME - tbd ===<br />
<br />
=== TIME$ - tbd ===<br />
<br />
=== STRIG(button) ===<br />
This function returns the state of one of the four joystick buttons. Negative 1 if pressed, zero if not pressed.<br />
Button numbers 1, 3, 5, 7 return the real time value of the button state. This allows rapid fire with the button held down.<br />
1 - Left joystick button 1<br />
3 - Left joystick button 2<br />
5 - Right joystick button 1<br />
7 - Right joystick button 2<br />
Button numbers 0, 2, 4, 6 return -1 if the button was pressed since the last time this function was called. It will then return 0 as long as the button is held down. A new button press will be required to get another -1. This is for single shot fire - the user needs to let go and press the button again in order to fire again.<br />
0 - Left joystick button 1<br />
2 - Left joystick button 2<br />
4 - Right joystick button 1<br />
6 - Right joystick button 2<br />
<br />
=== INPUT$(count, device) ===<br />
Used to scan an input device and accumulate a string:<br />
10 A$=INPUT$(3,#0)<br />
20 ? A$<br />
Will pause the program and wait for three keypresses. They are put into A$.<br />
<br />
=== ON ERROR GOTO <line number> ===<br />
BASIC will jump to line number when an error is encountered. ERL and ERR will contain the line number with the error and the numeric error code, respectively.<br />
<br />
== Changed Commands: ==<br />
<br />
The EDIT will now accept a single line number or a range. The command will clear the screen, list the program line/lines and put the cursor at the start of the screen.<br />
<br />
A CLS value of 9 to 255 will cold start the computer. We suspect that this is a bug that should eventually be fixed.<br />
<br />
A CLS value greater than 255 will cause an ?FC error.<br />
<br />
<br />
== Advanced Color BASIC - added ROM vector calls ===<br />
<br />
Like Color BASIC and Disk BASIC, which used Extended indirect addresses to call functions within the ROM’s (like JOYIN, DSKCON, etc.), Advanced Color BASIC seems to reserve from $8000-$8015 for additional calls as well. This allows the routines themselves to move around as the ROM was updated, but calling programs would have a set point to enter them.<br />
[$8000] - Calls $FB00, which is a 3 entry table of LBRA instructions:<br />
LBRA $FD32<br />
LBRA $FB1A<br />
LBRA $FD92<br />
[$8002] - Calls $FB09, which is a 1 entry table of LBRA instructions (I assume more would have<br />
been added later)<br />
LBRA $FE16<br />
[$8004] - ??? (points to $09D4, which is in BASIC’s data area)<br />
[$8006] - ??? (points to $E968)<br />
[$8008] - ??? (points to $0ABE, which is in BASIC’s data area)<br />
[$800A] - ??? (points to $AD15)<br />
[$800C] - If $0A04=0, initialize the 6551 & it’s related variables including 128 byte receive<br />
buffer (calls $9254)<br />
[$800E] - ??? (points to $929D)<br />
[$8010] - ??? (points to $DE28)<br />
[$8012] - Calls $92E7, which will return a character from the 128 byte RS232 receive buffer,<br />
OR<br />
wait for an RS232 character to be received if the buffer is empty.<br />
[$8014] - Calls $92BD, which will transmit a character through the RS232.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=The_Voice&diff=8163The Voice2017-05-29T01:24:19Z<p>Tlindner: Added pictures.</p>
<hr />
<div>The voice was a cartridge base SC-01 voice synthesizer.<br />
<br />
<gallery caption="Printed Circuit Board" widths="180px" heights="120px" perrow="4"><br />
File:Speech_System_The_Voice_Front_PCB.JPG<br />
File:Speech_Systems_The_Voice_Back_PCB.JPG<br />
</gallery></div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=File:Speech_Systems_The_Voice_Back_PCB.JPG&diff=8162File:Speech Systems The Voice Back PCB.JPG2017-05-29T01:23:27Z<p>Tlindner: </p>
<hr />
<div></div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=File:Speech_System_The_Voice_Front_PCB.JPG&diff=8161File:Speech System The Voice Front PCB.JPG2017-05-29T01:23:06Z<p>Tlindner: </p>
<hr />
<div></div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=The_Voice&diff=8160The Voice2017-05-29T01:21:21Z<p>Tlindner: Created page with "The voice was a cartridge base SC-01 voice synthesizer."</p>
<hr />
<div>The voice was a cartridge base SC-01 voice synthesizer.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Hardware&diff=8159Hardware2017-05-29T01:20:36Z<p>Tlindner: Added link to The Voice</p>
<hr />
<div>{{NavHardware}}<br />
==Hardware design and integrated circuits==<br />
Internally the CoCo 1 and CoCo 2 models are functionally identical. The core of the system is virtually identical to the reference design included in the Motorola MC6883 data sheet and consists of five LSI chips:<br />
<br />
*MC6809E [[Microprocessor Unit]] (MPU)<br />
*MC6883/SN74LS783/SN74LS785 [[Synchronous Address Multiplexor]] (SAM)<br />
*MC6847 [[Video Display Generator]] (VDG)<br />
*Two [[Peripheral Interface Adapters]] (PIA), either MC6821 or MC6822 chips<br />
<br />
==Audio Digitizers==<br />
*[[Delta Pro]]<br />
*[[Max Sound]] - GimeSoft's audio recorder that used the joystick port.<br />
<br />
==Audio Output Devices==<br />
*[[Orchestra-90 CC (26-3143)]] - Stereo Music Synthesizer<br />
*[[Speech/Sound Cartridge (26-3144A)]] - Music and Speech Synthesizer<br />
*[[Super Voice]] - Speech Systems' Speech Synthesizer device that could sing.<br />
*[[Real Talker]] Voice Synthesizer by Colorware<br />
*[[The Voice]] - Speech Systems' Speech Synthesizer<br />
<br />
==Bus Expander==<br />
*[[Multi-Pak|Tandy Multipak (26-3024)]]<br />
*[[Multi-Pak|Tandy Multipak (26-3124)]]<br />
*[[Colorburst|Colorburst By Maxsys]]<br />
*[[Howard Medical Slotpak]]<br />
*[[Orion Technologies XPort]]<br />
*[[CoNect Xpander]]<br />
*[[CoNect Y Box]]<br />
*[[Y-Cable]]<br />
*[[Solderless Proto Board]]<br />
<br />
==Computers & Clones==<br />
*[[TRS-80 Color Computers]] (A list of all available models)<br />
*[[Dragon]]<br />
*[http://en.wikipedia.org/wiki/TRS-80_MC-10 MC-10 Micro Color Computer]<br />
*[[CP400]]<br />
*[[TDP-100]]<br />
*[[LZ Color64]] Brazilian clone<br />
*[[Dynacom MX-1600]] Brazilian clone<br />
<br />
==Tandy/Radio Shack Tape Drive Systems==<br />
*[[CCR-81 (26-1208)]]<br />
*[[CCR-82]]<br />
*[[CCR-83]]<br />
<br />
==Other Tape Drive Systems==<br />
*[[Exatron Stringy Floppy]]<br />
<br />
==Tandy/Radio Shack Floppy Disk Systems==<br />
[[Floppy Controllers]]<br />
*[[26-3022]]<br />
*[[26-3029]]<br />
*[[FD-500 (26-3129)]]<br />
*[[FD-501 (26-3131)]]<br />
*[[FD-502 (26-3133)]]<br />
*[[Other Floppy Disk]]<br />
===Hacking===<br />
*[[Hacking Disk]] 40, 80 Track, 2 Sides<br />
*[[26-3029 CoCo Disk Controller High Density Modifications]]<br />
[http://users.digitalindigo.net/~techno/coco_floppy.html Extracted from]<br />
<br />
==Other Floppy Disk Controllers==<br />
*[[SDC Floppy Emulator]]<br />
*[[Disto Super Controller]]<br />
*[[Disto Super Controller II]]<br />
*[[Disto Mini Controller]]<br />
*[[J&M/Owl-Ware]]<br />
*[[Hard Drive Specialists]]<br />
*[[Sardis Technologies 'no-halt' Controller]]<br />
<br />
==Alternate Floppy Disk Controller ROMs==<br />
*[[ADOS/ADOS-3]]<br />
*[[RGBDOS]]<br />
*[[JDOS]]<br />
*[[MYDOS]]<br />
*[[CDOS]]<br />
*[[OWLDOS]]<br />
*[[HDB-DOS]]<br />
<br />
==Hard Drive Controllers==<br />
*[[Tandy Hard Drive Controller]]<br />
*[[Burke & Burke]] - CoCo XT/CoCo XT-RTC<br />
*[[KenTon]] - SCSI<br />
*[[Gleside IDE Interface]]<br />
*[[Cloud-9 SuperIDE Interface]]<br />
*[[Cloud-9 TC^3 SCSI Interface]]<br />
*[[Owl-Ware]]<br />
<br />
==Input Devices==<br />
*[[The Glove]]<br />
*[[Le Stick]]<br />
*[[Joystick]]<br />
*[[Deluxe Joystick]]<br />
*[[Wico Deluxe Joystick]]<br />
*[[Mouse]] (1 Button)<br />
*[[Deluxe Color Mouse]] (2 button)<br />
*[[X-Pad]]<br />
*[[Koala Pad]]<br />
*[[Diecom Light Phaser Interface]]<br />
*[[Atari to CoCo Joystick Adapter]]<br />
*[[Tandy Hi-Res Joystick Adapter]]<br />
*[[Colorware Super Hi-Res Interface]]<br />
*[[Hawksoft Dual Hi-Res Joystick Adapter]]<br />
*[[Puppo Keyboard Adapter]]<br />
*[[OWL Keyboard Adapter]]<br />
*[[Cloud-9 AT Keyboard Adapter]]<br />
*[[HJL-57 upgrade Keyboard]]<br />
<br />
==Memory Upgrades==<br />
*[[Tandy 512K Upgrade]]<br />
*[[Performace Peripherals 512K Upgrade]]<br />
*[[Cloud-9 512K Upgrade]]<br />
*[[Disto 1MB Upgrade]]<br />
*[[Disto 2MB Upgrade]]<br />
<br />
==MIDI Interfaces==<br />
*[[CoCo MIDI]]<br />
<br />
== Monitors==<br />
*[[Tandy CM-8]]<br />
*[[Maganavox 1CM135]]<br />
*[[Maganavox 8CM515]]<br />
*[[15KHz SVGA Monitors]]<br />
<br />
==Multi Devices==<br />
These are items that serve more than one purpose, such as Cloud-9's SuperBoard.<br />
*[[SuperBoard]]<br />
*[[FHL Eliminator]]<br />
*[[Disto MEB]]<br />
<br />
==RS232 Devices==<br />
*[[Deluxe RS232 Pak]]<br />
*[[Tandy DC Modem Pak]]<br />
*[[Orion Technologies RS232 Pak]]<br />
*[[Disto RS232 Pak]]<br />
*[[PBJ Dual Serial Port Pak]]<br />
*[[Kenton Dual Serial Port Pak]]<br />
*[[Quad Serial Port Pak]] - Who made this?<br />
*[[CoCoPro! RS232 Pak]]<br />
*[[CoNect Dual RS232 Pak]]<br />
*[[CoNect RS232 Pak]]<br />
*[[CoNect 16550 Pak]] - what is the official name?<br />
*[[Metric Model 101p Serial to Parallel Converter]]<br />
*[[Dayton Industries Blue Streak Ultima Serial to Parallel Converter]]<br />
<br />
==Video Digitizers==<br />
*[[Rascan]]<br />
*[[DS-69 Digisector]]<br />
<br />
== Video Out==<br />
*[[Video without RF Box]]<br />
*[[PBJ Wordpak/Wordpak II]]<br />
*[[Lucas Industries 2000 AutoDim]]<br />
*[[CoCo-1 Monocrome video]]<br />
*[[CoCo-1 composite video]]<br />
*[[CoCo-2 Composite Monitor Adapter]]<br />
*[[CoCo-3 RGB to CGA/EGA Adapter]]<br />
*[[RGB to VGA Converter]]<br />
*[[RGB to S-Video Converter]]<br />
*[https://hackaday.io/project/7366-coco-3-rgb-to-scart-to-hdmi-cable CoCo 3 RGB -> SCART -> HDMI]<br />
<br />
== Light Controler ==<br />
*[[X10 Lighting Control]]<br />
*[[Remote Command Controller 26-1182]]<br />
<br />
== Mods & Hacking ==<br />
*[[CoCo Turbo Light]]<br />
*[[DCModem to RS232 Pak]]<br />
*[[Disk Drive power LED]]<br />
*[[CoCo repack in PC]]<br />
*[[Speech & Sound Pack Modification for High Speed]]<br />
*[[CoCoEPROMpak]] Schematic board<br />
*[[Fahrfall]] New Game Cartridge and pak <br />
<br />
[[Category:Hardware]]</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Undercolor/840101/Heres_a_few_notes_from_readers/filler&diff=4089Undercolor/840101/Heres a few notes from readers/filler2009-02-10T17:55:28Z<p>Tlindner: Making pretty</p>
<hr />
<div>{{NavTop}}<br /><br />
UnderColor, Volume 1, Number 1, December 10, 1984<br />
[[image:Undercolor 840101 filler Heres a few notes from readers image.jpg|right|thumb]]<br />
Filler:<br />
* Title: Here’s a few notes from readers:<br><br />
* Text: <br />
<br />
Ideas: <br />
*How do you program an EPROM to start on Reset like Basic?<br />
*A weather station using A-D, temperature sensors, wind speed, etc.<br />
*How to program EPROMs using DEFT Systems Pascal<br />
*How to get OS-9 and Basic 09 to talk to the outside world<br />
*How to write device descriptors for OS-9 - Frank Dupont, Detroit, MI<br />
<br />
Comments:<br />
*At first I thought you [Dennis] were quitting your job with TCCM. That didn’t seem right. Then I thought perhaps you were fired, but that didn’t seem right either ... — Dave Shewchun<br />
*Custom Color has to continue, for many good things to sink my teeth in are still under blankets ... — David Nicol<br />
*Nice to hear that a new CoCo publication is starting up ... — Allan Ashton<br />
*[Referring to this publication] Please accept this letter as my vote in favor of such a project! — Jon Morse<br />
*[Referring to Custom Color] I have always enjoyed your column (even though I usually didn’t understand it) ... — Jock Kraft<br />
*... you've given us our magazine back — only better! — Dennis Peterson<br />
<br />
[[Category:Publications]]<br />
[[Category:Newsletters]]</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=User:Cocomag&diff=4088User:Cocomag2009-02-07T18:48:25Z<p>Tlindner: </p>
<hr />
<div>This user is under the control of [[User:tlindner|tim lindner]].<br />
<br />
I use this user to push magazine content from the [http://cocomag.dyndns.org/ Cocomag] web site to this wiki.<br />
<br />
Editing magazine issues on the Cocomag website is very limited. When a magazine issue is deemed finished the content is moved here so that the full wiki editing suite is available to manipulate articles.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=User:Cocomag&diff=4087User:Cocomag2009-02-07T18:45:28Z<p>Tlindner: New page: This user is under the control of tim lindner. I use this user to push magazine content from the [http://cocomag.dyndns.org/ Cocomag] web site to this wiki. Editing magazine issues on th...</p>
<hr />
<div>This user is under the control of tim lindner.<br />
<br />
I use this user to push magazine content from the [http://cocomag.dyndns.org/ Cocomag] web site to this wiki.<br />
<br />
Editing magazine issues on the Cocomag website is very limited. When a magazine issue is deemed finished the content is moved here so that the full wiki editing suite is available to manipulate articles.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Undercolor/840102/Color_Count/filler&diff=4063Undercolor/840102/Color Count/filler2009-02-07T18:25:02Z<p>Tlindner: </p>
<hr />
<div>{{NavTop}}<br /><br />
UnderColor, Volume 1, Number 2, December 25, 1984<br />
[[image:Undercolor 840102 filler Color Count image.jpg|right|thumb]]<br />
Filler:<br />
* Title: Color Count<br><br />
* Text: <br><br> What's a picture worth? Well... a Color hi-res screen picture is 256 pixels wide by 192 pixels high, which comes to a total of 49,152 pixels. Each pixel is coded by a single bit in that mode. Divide by 8 (8 bits to a byte) and you discover a Color hi-res picture contains 6114 (6K) bytes of information. Now, typically a single English character is coded by a single byte. Thus, that Color hi-res picture contains 6K characters worth of information. The average word is about five letters long, and is typically accompanied by a space. Thus, the average word takes six characters, total. Six into 6K is about 1000. And so, we discover that a picture... a hi-res Color picture at any rate... is worth almost precisely 1000 words.<br>— Marty Goodman<br><br><br />
[[Category:Publications]]<br />
[[Category:Newsletters]]</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Undercolor/840101&diff=4043Undercolor/8401012009-02-07T17:12:52Z<p>Tlindner: /* Filler */</p>
<hr />
<div>{{NavTop}}<br /><br />
UnderColor, Volume 1, Number 1, December 10, 1984<br />
<br />
[[Undercolor/840101/Page Scans|All Pages Scans]]<br />
<br />
==Articles==<br />
<br />
{|<br />
|[[image:Undercolor-840101-004.jpg|thumb]]||<br />
* Title: Defuser<br />
* Author: Terry Kepner<br />
* Synopsis: All you could ask for.<br />
* Page: 2<br />
* [[Undercolor/840101/Defuser|Article Text]]<br />
* [[Undercolor/840101/Defuser/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-007.jpg|thumb]]||<br />
* Title: A Real-Time Talking Clock<br />
* Author: Dennis Kitsz<br />
* Synopsis: The first of several parts.<br />
* Page: 5<br />
* [[Undercolor/840101/A RealTime Talking Clock|Article Text]]<br />
* [[Undercolor/840101/A RealTime Talking Clock/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-006.jpg|thumb]]||<br />
* Title: Box 6809<br />
* Author:<br />
* Synopsis: Comments from our readers.<br />
* Page: 6<br />
* [[Undercolor/840101/Box 6809|Article Text]]<br />
* [[Undercolor/840101/Box 6809/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-016.jpg|thumb]]||<br />
* Title: Memory Test<br />
* Author: Stephen P. Allen<br />
* Synopsis: Do you really have 64k?<br />
* Page: 13<br />
* [[Undercolor/840101/Memory Test|Article Text]]<br />
* [[Undercolor/840101/Memory Test/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-018.jpg|thumb]]||<br />
* Title: Off Color: Who's Fibonacci?<br />
* Author: Mark Haverstock<br />
* Synopsis: A light-hearted look at numbers<br />
* Page: 16<br />
* [[Undercolor/840101/Off Color Whos Fibonacci|Article Text]]<br />
* [[Undercolor/840101/Off Color Whos Fibonacci/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-020.jpg|thumb]]||<br />
* Title: News and Gossip<br />
* Author:<br />
* Synopsis: Carefully prepared, delicately worded, infinitely interesting.<br />
* Page: 18<br />
* [[Undercolor/840101/News and Gossip|Article Text]]<br />
* [[Undercolor/840101/News and Gossip/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-024.jpg|thumb]]||<br />
* Title: Win Bill Barden!<br />
* Author: William Barden, Jr.<br />
* Synopsis: Bill poses a fun problem.<br />
* Page: 22<br />
* [[Undercolor/840101/Win Bill Barden|Article Text]]<br />
* [[Undercolor/840101/Win Bill Barden/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-025.jpg|thumb]]||<br />
* Title: Bulletin Board Listings<br />
* Author:<br />
* Synopsis:<br />
* Page: 23<br />
* [[Undercolor/840101/Bulletin Board Listings|Article Text]]<br />
* [[Undercolor/840101/Bulletin Board Listings/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-026.jpg|thumb]]||<br />
* Title: Reviews<br />
* Author:<br />
* Synopsis:<br />
* Page: 24<br />
* [[Undercolor/840101/Reviews|Article Text]]<br />
* [[Undercolor/840101/Reviews/Pages|Page Scans]]<br />
|-<br />
|}<br />
==Filler==<br />
<br />
{|<br />
|[[image:Undercolor_840101_filler_Heres_a_few_notes_from_readers_image.jpg|thumb]]||<br />
* Title: Here’s a few notes from readers:<br />
* [[Undercolor/840101/Heres a few notes from readers/filler|Filler Text]]<br />
|-<br />
|[[image:Undercolor_840101_filler_Whos_who_image.jpg|thumb]]||<br />
* Title: Who's who<br />
* [[Undercolor/840101/Whos who/filler|Filler Text]]<br />
|-<br />
|[[image:Undercolor_840101_filler_Published_By_image.jpg|thumb]]||<br />
* Title: Published By<br />
* [[Undercolor/840101/Published By/filler|Filler Text]]<br />
|-<br />
|}<br />
<br />
==Advertisments==<br />
<br />
{|<br />
|[[image:Undercolor_840101-019_advertisment_Grafx_image.jpg|thumb]]||<br />
* Company Name: Grafx<br />
* Company Address: P.O. Box 254<br />
West Miffiln, PA 15122<br />
|-<br />
|[[image:Undercolor-840101-002.jpg|thumb]]||<br />
* Company Name: Green Mountian Micro<br />
* Company Address: Bathory Road, Box U<br />
Roxbury, Vermont 05669<br />
|-<br />
|[[image:Undercolor-840101-027.jpg|thumb]]||<br />
* Company Name: Software Support, Inc.<br />
* Company Address: One Edgell Road<br />
Framingham, MA 01701<br />
<br />
<br />
|-<br />
|[[image:Undercolor-840101-028.jpg|thumb]]||<br />
* Company Name: Computer Systems Center<br />
* Company Address: 13461 Olive Blvd.<br />
Chesterfield, MO 63017<br />
|-<br />
|[[image:Undercolor_840101-014_advertisment_Under_Color_image.jpg|thumb]]||<br />
* Company Name: Under Color<br />
* Company Address: Box 6809<br />
Roxbury, VT 05669<br />
|-<br />
|[[image:Undercolor-840101-015.jpg|thumb]]||<br />
* Company Name: The Rainbow<br />
* Company Address: 9529 U.S. Highway 42<br />
The Falsoft Bldg.<br />
P.O. Box 385<br />
Prospect, KY 40059<br />
|-<br />
|}</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Undercolor/840101&diff=4023Undercolor/8401012009-02-07T16:52:28Z<p>Tlindner: /* Filler */</p>
<hr />
<div>{{NavTop}}<br /><br />
UnderColor, Volume 1, Number 1, December 10, 1984<br />
<br />
[[Undercolor/840101/Page Scans|All Pages Scans]]<br />
<br />
==Articles==<br />
<br />
{|<br />
|[[image:Undercolor-840101-004.jpg|thumb]]||<br />
* Title: Defuser<br />
* Author: Terry Kepner<br />
* Synopsis: All you could ask for.<br />
* Page: 2<br />
* [[Undercolor/840101/Defuser|Article Text]]<br />
* [[Undercolor/840101/Defuser/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-007.jpg|thumb]]||<br />
* Title: A Real-Time Talking Clock<br />
* Author: Dennis Kitsz<br />
* Synopsis: The first of several parts.<br />
* Page: 5<br />
* [[Undercolor/840101/A RealTime Talking Clock|Article Text]]<br />
* [[Undercolor/840101/A RealTime Talking Clock/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-006.jpg|thumb]]||<br />
* Title: Box 6809<br />
* Author:<br />
* Synopsis: Comments from our readers.<br />
* Page: 6<br />
* [[Undercolor/840101/Box 6809|Article Text]]<br />
* [[Undercolor/840101/Box 6809/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-016.jpg|thumb]]||<br />
* Title: Memory Test<br />
* Author: Stephen P. Allen<br />
* Synopsis: Do you really have 64k?<br />
* Page: 13<br />
* [[Undercolor/840101/Memory Test|Article Text]]<br />
* [[Undercolor/840101/Memory Test/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-018.jpg|thumb]]||<br />
* Title: Off Color: Who's Fibonacci?<br />
* Author: Mark Haverstock<br />
* Synopsis: A light-hearted look at numbers<br />
* Page: 16<br />
* [[Undercolor/840101/Off Color Whos Fibonacci|Article Text]]<br />
* [[Undercolor/840101/Off Color Whos Fibonacci/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-020.jpg|thumb]]||<br />
* Title: News and Gossip<br />
* Author:<br />
* Synopsis: Carefully prepared, delicately worded, infinitely interesting.<br />
* Page: 18<br />
* [[Undercolor/840101/News and Gossip|Article Text]]<br />
* [[Undercolor/840101/News and Gossip/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-024.jpg|thumb]]||<br />
* Title: Win Bill Barden!<br />
* Author: William Barden, Jr.<br />
* Synopsis: Bill poses a fun problem.<br />
* Page: 22<br />
* [[Undercolor/840101/Win Bill Barden|Article Text]]<br />
* [[Undercolor/840101/Win Bill Barden/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-025.jpg|thumb]]||<br />
* Title: Bulletin Board Listings<br />
* Author:<br />
* Synopsis:<br />
* Page: 23<br />
* [[Undercolor/840101/Bulletin Board Listings|Article Text]]<br />
* [[Undercolor/840101/Bulletin Board Listings/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-026.jpg|thumb]]||<br />
* Title: Reviews<br />
* Author:<br />
* Synopsis:<br />
* Page: 24<br />
* [[Undercolor/840101/Reviews|Article Text]]<br />
* [[Undercolor/840101/Reviews/Pages|Page Scans]]<br />
|-<br />
|}<br />
==Filler==<br />
<br />
{|<br />
|[[image:Undercolor_840101_filler_Heres_a_few_notes_from_readers_image.jpg|thumb]]||<br />
* Title: Hereâs a few notes from readers:<br />
* [[Undercolor/840101/Heres a few notes from readers/filler|Filler Text]]<br />
|-<br />
|[[image:Undercolor_840101_filler_Whos_who_image.jpg.|thumb]]||<br />
* Title: Who's who<br />
* [[Undercolor/840101/Whos who/filler|Filler Text]]<br />
|-<br />
|[[image:Undercolor_840101_filler_Published_By_image.jpg.|thumb]]||<br />
* Title: Published By<br />
* [[Undercolor/840101/Published By/filler|Filler Text]]<br />
|-<br />
|}<br />
<br />
==Advertisments==<br />
<br />
{|<br />
|[[image:Undercolor_840101-019_advertisment_Grafx_image.jpg.|thumb]]||<br />
* Company Name: Grafx<br />
* Company Address: P.O. Box 254<br />
West Miffiln, PA 15122<br />
|-<br />
|[[image:Undercolor-840101-002.jpg.|thumb]]||<br />
* Company Name: Green Mountian Micro<br />
* Company Address: Bathory Road, Box U<br />
Roxbury, Vermont 05669<br />
|-<br />
|[[image:Undercolor-840101-027.jpg.|thumb]]||<br />
* Company Name: Software Support, Inc.<br />
* Company Address: One Edgell Road<br />
Framingham, MA 01701<br />
<br />
<br />
|-<br />
|[[image:Undercolor-840101-028.jpg.|thumb]]||<br />
* Company Name: Computer Systems Center<br />
* Company Address: 13461 Olive Blvd.<br />
Chesterfield, MO 63017<br />
|-<br />
|[[image:Undercolor_840101-014_advertisment_Under_Color_image.jpg.|thumb]]||<br />
* Company Name: Under Color<br />
* Company Address: Box 6809<br />
Roxbury, VT 05669<br />
|-<br />
|[[image:Undercolor-840101-015.jpg.|thumb]]||<br />
* Company Name: The Rainbow<br />
* Company Address: 9529 U.S. Highway 42<br />
The Falsoft Bldg.<br />
P.O. Box 385<br />
Prospect, KY 40059<br />
|-<br />
|}</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Undercolor/840101&diff=4021Undercolor/8401012009-02-07T16:39:43Z<p>Tlindner: /* Filler */</p>
<hr />
<div>{{NavTop}}<br /><br />
UnderColor, Volume 1, Number 1, December 10, 1984<br />
<br />
[[Undercolor/840101/Page Scans|All Pages Scans]]<br />
<br />
==Articles==<br />
<br />
{|<br />
|[[image:Undercolor-840101-004.jpg|thumb]]||<br />
* Title: Defuser<br />
* Author: Terry Kepner<br />
* Synopsis: All you could ask for.<br />
* Page: 2<br />
* [[Undercolor/840101/Defuser|Article Text]]<br />
* [[Undercolor/840101/Defuser/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-007.jpg|thumb]]||<br />
* Title: A Real-Time Talking Clock<br />
* Author: Dennis Kitsz<br />
* Synopsis: The first of several parts.<br />
* Page: 5<br />
* [[Undercolor/840101/A RealTime Talking Clock|Article Text]]<br />
* [[Undercolor/840101/A RealTime Talking Clock/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-006.jpg|thumb]]||<br />
* Title: Box 6809<br />
* Author:<br />
* Synopsis: Comments from our readers.<br />
* Page: 6<br />
* [[Undercolor/840101/Box 6809|Article Text]]<br />
* [[Undercolor/840101/Box 6809/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-016.jpg|thumb]]||<br />
* Title: Memory Test<br />
* Author: Stephen P. Allen<br />
* Synopsis: Do you really have 64k?<br />
* Page: 13<br />
* [[Undercolor/840101/Memory Test|Article Text]]<br />
* [[Undercolor/840101/Memory Test/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-018.jpg|thumb]]||<br />
* Title: Off Color: Who's Fibonacci?<br />
* Author: Mark Haverstock<br />
* Synopsis: A light-hearted look at numbers<br />
* Page: 16<br />
* [[Undercolor/840101/Off Color Whos Fibonacci|Article Text]]<br />
* [[Undercolor/840101/Off Color Whos Fibonacci/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-020.jpg|thumb]]||<br />
* Title: News and Gossip<br />
* Author:<br />
* Synopsis: Carefully prepared, delicately worded, infinitely interesting.<br />
* Page: 18<br />
* [[Undercolor/840101/News and Gossip|Article Text]]<br />
* [[Undercolor/840101/News and Gossip/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-024.jpg|thumb]]||<br />
* Title: Win Bill Barden!<br />
* Author: William Barden, Jr.<br />
* Synopsis: Bill poses a fun problem.<br />
* Page: 22<br />
* [[Undercolor/840101/Win Bill Barden|Article Text]]<br />
* [[Undercolor/840101/Win Bill Barden/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-025.jpg|thumb]]||<br />
* Title: Bulletin Board Listings<br />
* Author:<br />
* Synopsis:<br />
* Page: 23<br />
* [[Undercolor/840101/Bulletin Board Listings|Article Text]]<br />
* [[Undercolor/840101/Bulletin Board Listings/Pages|Page Scans]]<br />
|-<br />
|[[image:Undercolor-840101-026.jpg|thumb]]||<br />
* Title: Reviews<br />
* Author:<br />
* Synopsis:<br />
* Page: 24<br />
* [[Undercolor/840101/Reviews|Article Text]]<br />
* [[Undercolor/840101/Reviews/Pages|Page Scans]]<br />
|-<br />
|}<br />
==Filler==<br />
<br />
{|<br />
|[[image:Undercolor_840101_filler_Heres_a_few_notes_from_readers_image.jpg|thumb]]||<br />
* Title: Hereâs a few notes from readers:<br />
* [[Undercolor/840101/Heres a few notes from readers/filler|Filler Text]]<br />
|-<br />
|[[image:5/59/Undercolor_840101_filler_Whos_who_image.jpg|thumb]]||<br />
* Title: Who's who<br />
* [[Undercolor/840101/Whos who/filler|Filler Text]]<br />
|-<br />
|[[image:8/81/Undercolor_840101_filler_Published_By_image.jpg|thumb]]||<br />
* Title: Published By<br />
* [[Undercolor/840101/Published By/filler|Filler Text]]<br />
|-<br />
|}<br />
<br />
==Advertisments==<br />
<br />
{|<br />
|[[image:f/f7/Undercolor_840101-019_advertisment_Grafx_image.jpg|thumb]]||<br />
* Company Name: Grafx<br />
* Company Address: P.O. Box 254<br />
West Miffiln, PA 15122<br />
|-<br />
|[[image:0/0c/Undercolor-840101-002.jpg|thumb]]||<br />
* Company Name: Green Mountian Micro<br />
* Company Address: Bathory Road, Box U<br />
Roxbury, Vermont 05669<br />
|-<br />
|[[image:8/8d/Undercolor-840101-027.jpg|thumb]]||<br />
* Company Name: Software Support, Inc.<br />
* Company Address: One Edgell Road<br />
Framingham, MA 01701<br />
<br />
<br />
|-<br />
|[[image:4/4c/Undercolor-840101-028.jpg|thumb]]||<br />
* Company Name: Computer Systems Center<br />
* Company Address: 13461 Olive Blvd.<br />
Chesterfield, MO 63017<br />
|-<br />
|[[image:4/4c/Undercolor_840101-014_advertisment_Under_Color_image.jpg|thumb]]||<br />
* Company Name: Under Color<br />
* Company Address: Box 6809<br />
Roxbury, VT 05669<br />
|-<br />
|[[image:4/4c/Undercolor-840101-015.jpg|thumb]]||<br />
* Company Name: The Rainbow<br />
* Company Address: 9529 U.S. Highway 42<br />
The Falsoft Bldg.<br />
P.O. Box 385<br />
Prospect, KY 40059<br />
|-<br />
|}</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Sampling&diff=3826Sampling2008-05-17T18:11:07Z<p>Tlindner: Updated PIA block diagram link</p>
<hr />
<div>{{NavArticles}}<br />
<br />
== Joystick Sampling ==<br />
Successive Linear Approximation on the Color Computer<br />
<br />
The CoCo uses analog joysticks. A 5 volt signal is sent to the joystick and a smaller voltage is returned depending on the orientation of the stick. The job of reading the joystick is converting that analog voltage to a binary value. During this article it would be advisable to obtain a schematic of the Color Computer. Here is a [http://tlindner.macmess.org/?page_id=124 detailed] block diagram that will be good enough for this article. Also, a good understanding of the [http://www.google.com/search?q=pia+6821+pdf&ie=UTF-8&oe=UTF-8 Peripheral Interface Adaptor] will help you get the most out of machine language programming.<br />
<br />
Since the CoCo does not have a hardware Analog-To-Digital converter chip, the process it uses is called <i>successive linear approximation</i>.<br />
<br />
Here is the process:<br />
# Mute the CoCo.<br />
# Select a joystick.<br />
# Write a zero to the sound register<br />
# Compare the sound register to the value from the joystick.<br />
# If the sound register is greater than or equal to the joystick value, then you have just discovered the joystick value<br />
# Increment sound register.<br />
# Sound register only goes to 64, so stop when you hit 65.<br />
# Go back to step 4.<br />
<br />
== Mute the CoCo ==<br />
<br />
During this process you are writing to the sound register. You must mute the CoCo so none of this is audible. The CoCo's mute switch is controlled by line CB2 of PIA 2. CB2 (like the other 19 lines) is a bidirectional line. This means the line can either output data or input data. For this excersize we need to setup CB2 to output data. We do this by setting bits 4 and 5 of control register B.<br />
<br />
BEGIN LDA $FF23 Get current Control Register B value of PIA 2<br />
ORA #$30 Set CB2 to be an output. (Set bits 4 and 5.)<br />
<br />
Now the status of bit 3 of Control Register B will control the CB2 line. If bit 3 is low the line will be low. If bit 3 is high the line will be high. Setting CB2 low will mute the CoCo.<br />
<br />
ANDA #$F7 Clear bit 3 - Mute CoCo<br />
STA $FF23 Write value back to Control Register B<br />
<br />
== Select a joystick ==<br />
<br />
There are two josticks with two axes each. This is four different joystick values to read. <br />
{| border="1" cellpadding="1"<br />
|-<br />
! Position !! Joystick<br />
|-<br />
! 0 !! Right, Horiz<br />
|-<br />
! 1 !! Right, Vert<br />
|-<br />
! 2 !! Left, Horiz<br />
|-<br />
! 3 !! Left, Vert<br />
|}<br />
Four positions can be encoded in 2 bits:<br />
{| border="1" cellpadding="1"<br />
|-<br />
! Binary !! Decimal<br />
|-<br />
! 00 !! 0<br />
|-<br />
! 01 !! 1<br />
|-<br />
! 10 !! 2<br />
|-<br />
! 11 !! 3<br />
|}<br />
There is a four position selector switch inside the CoCo. It is controlled by CA2 and CB2 of PIA 1. CA2 represents the most significant bit of the position, and CB2 represents the least significant bit. These lines will need to be configured as outputs and then the lines themselves will be need to be set to the proper value.<br />
<br />
LDA $FF01 Get current Control Register A value of PIA 1<br />
LDB $FF03 Get current Control Register B value of PIA 1<br />
ORA #$30 Set CA2 to be an output. (Set bits 4 and 5 of CRA.)<br />
ORB #$30 Set CB2 to be an output. (Set bits 4 and 5 of CRB.)<br />
ANDA #$F7 Set CA2 low. (Clear bit 3.)<br />
ORB #$08 Set CB2 high. (Set bit 3.)<br />
STA $FF01 Store value back in CRA.<br />
STB $FF03 Store value back in CRA.<br />
<br />
CA2 low and CB2 high means we are selecting position 1 which corresponds to the vertical axis of the right joystick.<br />
<br />
== Write a zero to the sound register ==<br />
<br />
The CoCo's sound register is 6 bits of side A of PIA 2. Specifically bits 2 thru 7 of the Data Register A. This corresponds to lines PA2 thru PA7. These lines need to be configured as outputs so their signals will go to the digital to analog converter.<br />
<br />
LDA $FF21 Load Control Register A of PIA 2<br />
ANDA #$FB Engage Data Direction Register A. (Clear bit 2.)<br />
STA $FF21 Store value back in CRA.<br />
LDA $FF20 Load Data Direction Register A of PIA 2.<br />
ORA #$FC Set lines PA2 thru PA7 as output. (Set bits 2 thru 7.)<br />
STA $FF20 Store value back in DDRA.<br />
<br />
Address $FF20 is both the Data Register A and the Data Direction Register A. It's function is controller by bit 2 of the Control Register A. So in order to actually write data to the CoCo's sound register we need to modify the control register so we can access the data register.<br />
<br />
LDA $FF21 Load Control Register A of PIA 2<br />
ORA #$04 Engage Data Register A. (Set bit 2.)<br />
STA $FF21 Store value back in CRA.<br />
<br />
Clearing bits 2 thru 7 of the Data Register A of PIA 2 will write a zero to the sound register.<br />
<br />
LDB $FF20 Load Data Register A of PIA 2.<br />
ANDB #$03 Write a zero to the sound register. (Clear bits 2 thru 7.)<br />
<br />
== Compare the sound register to the value from the joystick ==<br />
<br />
The comparator chip inside the CoCo has two analog inputs and one digital output. The two inputs are labeled plus and minus. The plus input is connected to the four position switch that connects to the four different joystick axis. The minus input is connected to the output of the digital to analog converted that is controlled by bits 2 thru 7 of side A of PIA 2. The comparator will output a high signal if the plus input is higher than the minus input. Otherwise the comparator will output a low signal. The comparator output is connected to line PA7 of PIA 1. We need to setup this line to be an input.<br />
<br />
LDA $FF01 Load Control Register A of PIA 1<br />
ANDA #$FB Engage Data Direction Register A. (Clear bit 2.)<br />
STA $FF01 Store value back in CRA.<br />
LDA $FF00 Load Data Direction Register A of PIA 1.<br />
ANDA #$7F Set line PA7 to be an input. (Clear bit 7.)<br />
STA $FF00 Store value back in DDRA.<br />
<br />
Modify the Control Register A to engage the Data Register A at $FF00.<br />
<br />
LDA $FF01 Load Control Register A of PIA 1<br />
ORA #$04 Engage Data Register A. (Set bit 2.)<br />
STA $FF01 Store value back in CRA.<br />
<br />
Read the output from the comparator.<br />
<br />
LOOP STB $FF20 Store value in Sound Register<br />
LDA $FF00 Bit 7 of register A contains the output information from the comparator.<br />
<br />
If bit 7 is high, then we have found the current value.<br />
<br />
BPL DONE Branch if negative condition is set to label DONE.<br />
== Increment sound register ==<br />
Increment Sound register value by one.<br />
<br />
ADDB #$04 Increment Sound register by one value<br />
<br />
Check for a carry. The sound register will overflow after 64 tries.<br />
<br />
BCS DONE Branch to label DONE if carry bit set.<br />
BRA LOOP Branch back to the label LOOP<br />
<br />
We're done. The value of the joystick is in the sound register. We need to shift the data over two bits to normalize it to 1 thru 64.<br />
<br />
DONE LSRB Logical shift right<br />
LSRB Logical shift right<br />
<br />
Now subtract one to bring it to 0 thru 63.<br />
<br />
DECB<br />
<br />
Write value to video memory to see it.<br />
<br />
ORB #$80 Set bit 7 to turn it into a VDG graphic character<br />
STA $500 Put value into middle of the 32 collum screen.<br />
SWI Return to ZBUG.<br />
END<br />
<br />
== Colophon ==<br />
As you can see, reading the joystick is quite involved. It is interesting to note that Color BASIC will attempt to read the joystick value ten times but will immediately return once it gets the same value twice from this process. If all ten tries produce different results, the tenth is returned.<br />
<br />
Another quirk is BASIC will sample all four joysticks when joystick zero is read. Reading joysticks 1 thru 3 will return values cached during the sampling done when issuing the JOYSTK(0) command.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=CoCo3_Easter_Egg&diff=3551CoCo3 Easter Egg2007-07-11T21:46:55Z<p>Tlindner: Added link to Todd Earls page here in the wiki</p>
<hr />
<div>{{NavArticles}}<br />
The Color Computer 3 contained a few well-known "Easter Eggs" (hidden gems that programmers often sneak into code to be called up at a later time through some cryptic means). This page documents those eggs and how some of them came about.<br />
<br />
==The Egg==<br />
[[Image:CoCo3_Easter_Egg.png|center|CoCo 3 Mugateers]]<br />
The above picture is universally recognized by Color Computer 3 owners the world over! It has been called by various names ("The CoCo Three", "The Three Mugateers", "The Three Amigos", "Wasted Space", etc.) and can be displayed on every Color Computer 3 ever manufactured. Interestingly, the sequence on how to bring it up was kept secret until shortly after the release of the CoCo 3 in July of 1986. That is what makes it an ''Easter Egg''.<br />
<br />
To see the picture hold down the ''CTRL'' and ''ALT'' keys the CoCo 3's keyboard while powering up. Alternatively, hold down ''CTRL'' and ''ALT'' then press the reset button on the back right of the case. This sequences put the CoCo 3 into a special mode where the only thing it can do is display this picture. A nifty side effect of this easter egg is now there is an easy way to to generate a cold restart of the machine. Pressing the reset button again will produce the standard Color Computer 3 power on sequence.<br />
<br />
==Fertilizing the Egg: Tandy Contemplates a "CoCo 3"==<br />
For years, Color Computer users pined for a newer Color Computer that would compete with the likes of Amiga and Commodore on a more even footing. The antiquated 32x16 character screen on the Color Computer and Color Computer 2 was seen as a drawback, as was the limited graphics and color capabilities.<br />
<br />
In 1985, the design and development of the Color Computer 3 began in earnest. It would eventually arrive in Radio Shack stores in August of 1986 and become a worthy competitor in the home computer arena.<br />
<br />
But few knew what was lurking inside...<br />
<br />
==Microware "Comes Into The Picture"==<br />
During the design of the Color Computer 3 hardware, Tandy commissioned Microware to extend the internal BASIC interpreter with new commands and functions. This proved to be somewhat problematic, since the BASIC ROM code was licensed from Microsoft. While there is no concrete knowledge of why Microsoft wasn't tasked with revamping their BASIC interpreter to support the features of the new Color Computer 3, there's conjecture that:<br />
<br />
* By that time, Microsoft was too busy and important to do work for the Color Computer 3.<br />
* Tandy and Microsoft may not have been able to agree on a price.<br />
* Since Microware was doing OS-9 Level Two for Tandy anyway, a deal may have been cut for Microware to extend the BASIC interpreter as well.<br />
<br />
Whatever the reason, in the end Microware was tasked to write code patches which would extend Color BASIC to support the new features of the CoCo 3. This approach of "patching" was an interesting one, and was specifically employed to prevent any perceived licensing violations between Tandy and Microsoft.<br />
<br />
The three people pictured in the ''Easter Egg'' are Mark Hawkins, Tim Harris and [[Todd Earles]]. They were Microware employees who worked on the additional functionality of the internal BASIC interpreter.<br />
<br />
''Were they the only ones? Why were they included in the picture? Did they work on OS-9 Level 2?''<br />
<br />
==The Egg is Hatched==<br />
It didn't take long for word to get out that the Color Computer 3 contained a cleverly hidden picture of three of its software designers. Within weeks of the CoCo 3's release, Radio Shack stores began seeing the picture of the mugateers emblazened on their CoCo 3 systems on display thanks to prankish customers. In the December 1986 issue of Rainbow Magazine, managing editor Jim Reed dedicated a great deal of his column to the phenomenon, even announcing a contest in which one winner from each state would be rewarded if they could find an alternate way to bring up the "Gang of 3."<br />
<br />
The folks at Tandy Towers were not amused at this apparent "undocumented" addition to their new Color Computer 3. Ex-Tandy employee [http://groups.google.com/group/comp.sys.tandy/msg/eaa2bf487fb3e538?hl=en& Frank Durda IV] put it this way in a message posted to comp.sys.tandy on March 13, 2003:<br />
<div style="padding: .5em 1em 1em; margin: 3px;"><br />
<div style="clear:left"> <i>Microware demanded and grudgingly got an 8K ROM budget, then they used 2K for the ordered improvements and almost 6K for the photo. Tandy hardware and R&D management were really, really irritated with Microware over this once it was discovered, as they could have put a cheaper 2K ROM in instead and gotten the wanted fixes. (In those days, the difference in price between the 8K masked ROM and 2K masked ROM was significant.)<br><br />
You don't know how many internal projects got put under the microscope by hardware management after that stunt, looking for what we now call "Easter Eggs" and as part of the witch hunt, killing what hardware management was calling "trivial" or unapproved functionality. A lot of good things died as a result of that stunt. It probably helped doom the Deluxe CoCo project too.<br />
</i></div></div><br />
While Durda's information generally seems to be in step with what is "in the know", there are some inaccuracies in his post. First, the code enhancements to the CoCo 3 took about 8K, not the 2K that he claims. Also, the Deluxe CoCo project was cancelled before the CoCo 3 was released, so it is unlikely that Tandy canned that project due to the Easter Egg.<br />
<br />
==Fact & Folklore About The Egg==<br />
It is pretty much established fact that the Easter Egg was put in by Microware employees who, by keeping the egg secret, made Forth Worth quite upset. What hasn't been known until recently was the motivation for creating the Easter Egg and exactly how it was done.<br />
<br />
The Easter Egg craze reached a frenzy of sorts in March of 1993, when the Mid Iowa & Country CoCo (MI&CC) hosted the one and only Mid-America CoCo Fest in Des Moines, Iowa, the home of Microware. Terry Simons, president of MI&CC, invited Mark Hawkins and Todd Earles, still Microware employees at the time, to attend the fest. Seeing an opportunity to make money, Terry offered attendees to take a digitized picture with two of the "Three Amigos" for a fee. Although the pictures weren't of the best quality, the promotion proved to be a hit. Almost all of the attendees stood between Mark and Todd to pose for the mock picture, effectively taking the place of Tim Harris, who had left Microware by then.<br />
<br />
Former Microware employee Boisy Pitre states, "Back when I worked for Microware, I asked Mark Hawkins to tell me the story about the picture in the ROM. From what Mark said, they used a digitizer on the CoCo to take individual pictures, then someone pasted them together into one image. The logo was added by hand, and he and Todd even had the exact same jacket on." The discovery of "The Mugs" Disk" in September 2005 corroborates Mark's assertion.<br />
<br />
Boisy continues, "Mark also said that at the time the CoCo 3 was being developed, Tandy insisted that Microware fill any unused space in the ROMs with 'random junk.' The guys thought that a picture would qualify as random data, and thus the idea of the Easter Egg was born."<br />
<br />
Mark Hawkins himself attended PennFest 2000, a CoCo Fest held August 19-20th, 2000 in Pittsburgh, Pennsylvania. During a Q&A session held there, Hawkins answered questions regarding the Easter Egg.<br />
[[image:MarkHawkins.jpg|right|thumb|320px|Mark Hawkins]]<br />
:Allen Huffman: <i>What was the picture done on?</i><br><br />
:Mark Hawkins: <i>Someone was selling a digitizer card at the time and Tim [Harris] got ahold of one. And the digitizing was done in part on a CoCo. Which is kind of neat and kind of unique and kind of interesting. We could never admit what-- how we'd done it. Somehow there was a conflict of interest with Tandy selling it or not. So we could never say it. And we actually got asked a couple of different times: "Did you use this digitizing card." Well we don't remember. But now I can tell you, we did. So it was done on the CoCo. But, what's also interesting is big M behind Tim's head doesn't exist. It was built. It was pixeled in later. It actually came from our logo on our business cards at the time. But he actually built it, he didn't scan it or anything. And then the other thing that is kind of interesting is that there are two people wearing a coat. The same coat. Not the same kind of coat-- the same coat. Which kind of tells you where I was going. They were actually shot individually and Tim pasted them all together one evening in his basement and came in... And that's the story of the picture. It could have been just a big Microware Logo, It could have been Shakespeare, it could have been who knows what else we could have come up with. We ended up with the picture.</i><br />
<br />
Today, as in the past, the Egg remains a source of humor, curiosity and even criticism. Many CoCo users have scoffed at the idea of filling the ROM with a picture when more useful features like a full screen editor could have been placed in the unused space. The truth is, it was Tandy's specification which drove the features of the CoCo 3, including the idea of filling the unused ROM space with garbage. Even if there were no picture, the space would have contained no useful code anyways.<br />
<br />
==A Fascinating Discovery==<br />
In August of 2005, a special floppy disk ("The Mugs Disk") was discovered. This 5.25" disk was the actual disk used to create the Easter Egg image in all Color Computer 3s, and contained the many raw graphic files. You can obtain the DSK image of the actual Mugs Disk here: [[Media:mugs.dsk|mugs.dsk]]<br />
=== Mugateer Source Images ===<br />
Here are the three pictures that were stitched together:<br />
[[Image:Mark_Hawkins.png|thumb|left|256px|Mark Hawkins]]<br />
[[Image:Tim_Harris.png|thumb|left|256px|Tim Harris]]<br />
[[Image:Todd_Earles.png|thumb|left|256px|Todd Earles]]<br />
{{Clr}}<br />
=== Other Unused Images ===<br />
On the same disk, pictures of other Microware employees were found. Perhaps some of these were considered for inclusion in the infamous picture? We'll likely never know!<br />
<br />
[[Image:Walden_Miller.png|left|thumb|320px|Walden Miller]]<br />
[[Image:Robert_Dogget.png|left|thumb|320px|Robert Doggett]]<br />
[[Image:Mary_Marturello_and_Andy_Ball.png|left|thumb|320px|Mary Marturello & Andy Ball]]<br />
[[Image:Mark_Hawkins_2.png|left|thumb|320px|Mark Hawkins]]<br />
[[Image:Larry_Crane.png|left|thumb|320px|Larry Crane]]<br />
[[Image:Ken_Mizuno.png|left|thumb|320px|Ken Mizuno]]<br />
[[Image:Ken_Kaplan_2.png|left|thumb|320px|Ken Kaplan]]<br />
[[Image:Eric_Miller.png|left|thumb|320px|Eric Miller]]<br />
[[Image:Eric_Miller_3.png|left|thumb|320px|Eric Miller]]<br />
[[Image:Eric_Miller_2.png|left|thumb|320px|Eric Miller]]<br />
[[Image:Bob_Sorensen.png|left|thumb|320px|Bob Sorensen]]<br />
[[Image:Bob_Moore.png|left|thumb|320px|Bill Moore]]<br />
{{Clr}}<br />
<br />
==Other Color Computer 3 Easter Eggs==<br />
[[Image:CLS9.png|right|320px|thumb|CLS 9-255 easter egg]]<br />
The second Easter Egg is brought up by issuing a CLS (clear screen) command with a parameter from 9 to 255 on the 40 or 80 column screen. (A similar egg exists in the original Color Computer 1/2 modles, though it reads "Microsoft".)<br />
[[Image:CLS100.png|right|thumb|320px|CLS 100 hi-res screen easter egg]]<br />
The third easter egg is brought up by switching to the 40 or 80 column screen and issuing a CLS 100. This only works once, unless the machine is reset. Typing the command again just displays the Microware message.<br />
[[Category:Articles]]</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Todd_Earles&diff=3550Todd Earles2007-07-11T21:45:32Z<p>Tlindner: </p>
<hr />
<div>Todd Earles worked for Microware. One of his projects was contributing to the Super Extended Color BASIC for the CoCo 3. He was born on June 26, 1960 and died July 9, 2007.<br />
<br />
[[Image:ToddEarlsPicture.jpg]]</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=File:ToddEarlsPicture.jpg&diff=3549File:ToddEarlsPicture.jpg2007-07-11T21:44:57Z<p>Tlindner: </p>
<hr />
<div></div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Todd_Earles&diff=3548Todd Earles2007-07-11T21:42:11Z<p>Tlindner: </p>
<hr />
<div>Todd Earles worked for Microware. One of his projects was contributing to the Super Extended Color BASIC for the CoCo 3. He was born on June 26, 1960 and died July 9, 2007.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Todd_Earles&diff=3547Todd Earles2007-07-11T21:41:50Z<p>Tlindner: </p>
<hr />
<div>Todd Earles worked for Microware. One of his projects was contributing to the Super Extended Color BASIC for the CoCo 3. He was bord on June 26, 1960 and died July 9, 2007.</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Category:People&diff=3546Category:People2007-07-11T21:39:52Z<p>Tlindner: Added Todd Earles</p>
<hr />
<div>{{NavPeople}}<br />
<br />
Here we can create pages for all the known CoCo folks, by category (programmers, hardware designers, writers, etc.) and any that register for accounts here can just link their personal info page to the page here. If that happens.<br />
<br />
==OS-9 Notables ==<br />
*[[Chris Burke]]<br />
*[[Kevin Darling]]<br />
*[[Alan DeKok]]<br />
<br />
==Game Greats==<br />
*[[Steve Bjork]]<br />
*[[Dave Dies]]<br />
<br />
==Other Folks==<br />
*[[Carl Boll]] - SysOp of ChiCoCo BBS and OS-9 advocate<br />
*[[Eric Crichlow]] - Author of ShellMate and Gold Runner<br />
*[[Al Dages]]<br />
*[[Todd Earles]] - Microware employee<br />
*[[Lawrence C. "Lonnie" Falk]] - Founder and publisher of Rainbow Magazine<br />
*[[Wayne Green]] - Founder and publisher of 80-Micro, Hot Coco and other publications<br />
*[[Marty Goodman]] - Famed CoCo columnist and hardware guru<br />
*[[Scott Griepentrog]]<br />
*[[Mike Haaland]]<br />
*[[Joel Hegberg]] - Prolific CoCo and MM/1 software developer<br />
*[[Gene Heskett]] - NitrOS-9 contributor<br />
*[[Allen Huffman]] - Sub-Etha Software, CoCo Chronicles (CoCoFest reports).<br />
*[[Paul Jerkatis]]<br />
*[[Tim Jenison]] - author of [[CoCo Max]] 1, involved with [[DS-69 Digisector]]<br />
*[[James Jones]] - Former Microware employee and Compiler Guru<br />
*[[Mike Knudsen]] - Music man and author of UltiMuse<br />
*[[Carl Kreider]] - OS-9 expert and creator of the AT-306<br />
*[[Eddie Kuns]]<br />
*[[Timothy Lindner]]<br />
*[[Mark Marlette]] - CoCo hadware guru and founder of Cloud-9<br />
*[[Terry Simons]] - Founder of Mid-Iowa Country & CoCo Club and a controversial figure in his day<br />
*[[Chet Simpson]]<br />
*[[R.C. Smith]] - Popular fest-goer and member of the Atlanta Computer Society<br />
*[[John Strong]] - Founder of StrongWare<br />
*[[Lee Veal]] - Proud owner of CoCo #00001<br />
*[[Paul Ward]] - The man behind the MM/1<br />
*[[David Wordell]]</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=CoCo3_Easter_Egg&diff=3545CoCo3 Easter Egg2007-07-11T21:37:43Z<p>Tlindner: Added life span to Mr. Earles mention.</p>
<hr />
<div>{{NavArticles}}<br />
The Color Computer 3 contained a few well-known "Easter Eggs" (hidden gems that programmers often sneak into code to be called up at a later time through some cryptic means). This page documents those eggs and how some of them came about.<br />
<br />
==The Egg==<br />
[[Image:CoCo3_Easter_Egg.png|center|CoCo 3 Mugateers]]<br />
The above picture is universally recognized by Color Computer 3 owners the world over! It has been called by various names ("The CoCo Three", "The Three Mugateers", "The Three Amigos", "Wasted Space", etc.) and can be displayed on every Color Computer 3 ever manufactured. Interestingly, the sequence on how to bring it up was kept secret until shortly after the release of the CoCo 3 in July of 1986. That is what makes it an ''Easter Egg''.<br />
<br />
To see the picture hold down the ''CTRL'' and ''ALT'' keys the CoCo 3's keyboard while powering up. Alternatively, hold down ''CTRL'' and ''ALT'' then press the reset button on the back right of the case. This sequences put the CoCo 3 into a special mode where the only thing it can do is display this picture. A nifty side effect of this easter egg is now there is an easy way to to generate a cold restart of the machine. Pressing the reset button again will produce the standard Color Computer 3 power on sequence.<br />
<br />
==Fertilizing the Egg: Tandy Contemplates a "CoCo 3"==<br />
For years, Color Computer users pined for a newer Color Computer that would compete with the likes of Amiga and Commodore on a more even footing. The antiquated 32x16 character screen on the Color Computer and Color Computer 2 was seen as a drawback, as was the limited graphics and color capabilities.<br />
<br />
In 1985, the design and development of the Color Computer 3 began in earnest. It would eventually arrive in Radio Shack stores in August of 1986 and become a worthy competitor in the home computer arena.<br />
<br />
But few knew what was lurking inside...<br />
<br />
==Microware "Comes Into The Picture"==<br />
During the design of the Color Computer 3 hardware, Tandy commissioned Microware to extend the internal BASIC interpreter with new commands and functions. This proved to be somewhat problematic, since the BASIC ROM code was licensed from Microsoft. While there is no concrete knowledge of why Microsoft wasn't tasked with revamping their BASIC interpreter to support the features of the new Color Computer 3, there's conjecture that:<br />
<br />
* By that time, Microsoft was too busy and important to do work for the Color Computer 3.<br />
* Tandy and Microsoft may not have been able to agree on a price.<br />
* Since Microware was doing OS-9 Level Two for Tandy anyway, a deal may have been cut for Microware to extend the BASIC interpreter as well.<br />
<br />
Whatever the reason, in the end Microware was tasked to write code patches which would extend Color BASIC to support the new features of the CoCo 3. This approach of "patching" was an interesting one, and was specifically employed to prevent any perceived licensing violations between Tandy and Microsoft.<br />
<br />
The three people pictured in the ''Easter Egg'' are Mark Hawkins, Tim Harris and Todd Earles (6/26/1960 - 7/9/2007). They were Microware employees who worked on the additional functionality of the internal BASIC interpreter.<br />
<br />
''Were they the only ones? Why were they included in the picture? Did they work on OS-9 Level 2?''<br />
<br />
==The Egg is Hatched==<br />
It didn't take long for word to get out that the Color Computer 3 contained a cleverly hidden picture of three of its software designers. Within weeks of the CoCo 3's release, Radio Shack stores began seeing the picture of the mugateers emblazened on their CoCo 3 systems on display thanks to prankish customers. In the December 1986 issue of Rainbow Magazine, managing editor Jim Reed dedicated a great deal of his column to the phenomenon, even announcing a contest in which one winner from each state would be rewarded if they could find an alternate way to bring up the "Gang of 3."<br />
<br />
The folks at Tandy Towers were not amused at this apparent "undocumented" addition to their new Color Computer 3. Ex-Tandy employee [http://groups.google.com/group/comp.sys.tandy/msg/eaa2bf487fb3e538?hl=en& Frank Durda IV] put it this way in a message posted to comp.sys.tandy on March 13, 2003:<br />
<div style="padding: .5em 1em 1em; margin: 3px;"><br />
<div style="clear:left"> <i>Microware demanded and grudgingly got an 8K ROM budget, then they used 2K for the ordered improvements and almost 6K for the photo. Tandy hardware and R&D management were really, really irritated with Microware over this once it was discovered, as they could have put a cheaper 2K ROM in instead and gotten the wanted fixes. (In those days, the difference in price between the 8K masked ROM and 2K masked ROM was significant.)<br><br />
You don't know how many internal projects got put under the microscope by hardware management after that stunt, looking for what we now call "Easter Eggs" and as part of the witch hunt, killing what hardware management was calling "trivial" or unapproved functionality. A lot of good things died as a result of that stunt. It probably helped doom the Deluxe CoCo project too.<br />
</i></div></div><br />
While Durda's information generally seems to be in step with what is "in the know", there are some inaccuracies in his post. First, the code enhancements to the CoCo 3 took about 8K, not the 2K that he claims. Also, the Deluxe CoCo project was cancelled before the CoCo 3 was released, so it is unlikely that Tandy canned that project due to the Easter Egg.<br />
<br />
==Fact & Folklore About The Egg==<br />
It is pretty much established fact that the Easter Egg was put in by Microware employees who, by keeping the egg secret, made Forth Worth quite upset. What hasn't been known until recently was the motivation for creating the Easter Egg and exactly how it was done.<br />
<br />
The Easter Egg craze reached a frenzy of sorts in March of 1993, when the Mid Iowa & Country CoCo (MI&CC) hosted the one and only Mid-America CoCo Fest in Des Moines, Iowa, the home of Microware. Terry Simons, president of MI&CC, invited Mark Hawkins and Todd Earles, still Microware employees at the time, to attend the fest. Seeing an opportunity to make money, Terry offered attendees to take a digitized picture with two of the "Three Amigos" for a fee. Although the pictures weren't of the best quality, the promotion proved to be a hit. Almost all of the attendees stood between Mark and Todd to pose for the mock picture, effectively taking the place of Tim Harris, who had left Microware by then.<br />
<br />
Former Microware employee Boisy Pitre states, "Back when I worked for Microware, I asked Mark Hawkins to tell me the story about the picture in the ROM. From what Mark said, they used a digitizer on the CoCo to take individual pictures, then someone pasted them together into one image. The logo was added by hand, and he and Todd even had the exact same jacket on." The discovery of "The Mugs" Disk" in September 2005 corroborates Mark's assertion.<br />
<br />
Boisy continues, "Mark also said that at the time the CoCo 3 was being developed, Tandy insisted that Microware fill any unused space in the ROMs with 'random junk.' The guys thought that a picture would qualify as random data, and thus the idea of the Easter Egg was born."<br />
<br />
Mark Hawkins himself attended PennFest 2000, a CoCo Fest held August 19-20th, 2000 in Pittsburgh, Pennsylvania. During a Q&A session held there, Hawkins answered questions regarding the Easter Egg.<br />
[[image:MarkHawkins.jpg|right|thumb|320px|Mark Hawkins]]<br />
:Allen Huffman: <i>What was the picture done on?</i><br><br />
:Mark Hawkins: <i>Someone was selling a digitizer card at the time and Tim [Harris] got ahold of one. And the digitizing was done in part on a CoCo. Which is kind of neat and kind of unique and kind of interesting. We could never admit what-- how we'd done it. Somehow there was a conflict of interest with Tandy selling it or not. So we could never say it. And we actually got asked a couple of different times: "Did you use this digitizing card." Well we don't remember. But now I can tell you, we did. So it was done on the CoCo. But, what's also interesting is big M behind Tim's head doesn't exist. It was built. It was pixeled in later. It actually came from our logo on our business cards at the time. But he actually built it, he didn't scan it or anything. And then the other thing that is kind of interesting is that there are two people wearing a coat. The same coat. Not the same kind of coat-- the same coat. Which kind of tells you where I was going. They were actually shot individually and Tim pasted them all together one evening in his basement and came in... And that's the story of the picture. It could have been just a big Microware Logo, It could have been Shakespeare, it could have been who knows what else we could have come up with. We ended up with the picture.</i><br />
<br />
Today, as in the past, the Egg remains a source of humor, curiosity and even criticism. Many CoCo users have scoffed at the idea of filling the ROM with a picture when more useful features like a full screen editor could have been placed in the unused space. The truth is, it was Tandy's specification which drove the features of the CoCo 3, including the idea of filling the unused ROM space with garbage. Even if there were no picture, the space would have contained no useful code anyways.<br />
<br />
==A Fascinating Discovery==<br />
In August of 2005, a special floppy disk ("The Mugs Disk") was discovered. This 5.25" disk was the actual disk used to create the Easter Egg image in all Color Computer 3s, and contained the many raw graphic files. You can obtain the DSK image of the actual Mugs Disk here: [[Media:mugs.dsk|mugs.dsk]]<br />
=== Mugateer Source Images ===<br />
Here are the three pictures that were stitched together:<br />
[[Image:Mark_Hawkins.png|thumb|left|256px|Mark Hawkins]]<br />
[[Image:Tim_Harris.png|thumb|left|256px|Tim Harris]]<br />
[[Image:Todd_Earles.png|thumb|left|256px|Todd Earles]]<br />
{{Clr}}<br />
=== Other Unused Images ===<br />
On the same disk, pictures of other Microware employees were found. Perhaps some of these were considered for inclusion in the infamous picture? We'll likely never know!<br />
<br />
[[Image:Walden_Miller.png|left|thumb|320px|Walden Miller]]<br />
[[Image:Robert_Dogget.png|left|thumb|320px|Robert Doggett]]<br />
[[Image:Mary_Marturello_and_Andy_Ball.png|left|thumb|320px|Mary Marturello & Andy Ball]]<br />
[[Image:Mark_Hawkins_2.png|left|thumb|320px|Mark Hawkins]]<br />
[[Image:Larry_Crane.png|left|thumb|320px|Larry Crane]]<br />
[[Image:Ken_Mizuno.png|left|thumb|320px|Ken Mizuno]]<br />
[[Image:Ken_Kaplan_2.png|left|thumb|320px|Ken Kaplan]]<br />
[[Image:Eric_Miller.png|left|thumb|320px|Eric Miller]]<br />
[[Image:Eric_Miller_3.png|left|thumb|320px|Eric Miller]]<br />
[[Image:Eric_Miller_2.png|left|thumb|320px|Eric Miller]]<br />
[[Image:Bob_Sorensen.png|left|thumb|320px|Bob Sorensen]]<br />
[[Image:Bob_Moore.png|left|thumb|320px|Bill Moore]]<br />
{{Clr}}<br />
<br />
==Other Color Computer 3 Easter Eggs==<br />
[[Image:CLS9.png|right|320px|thumb|CLS 9-255 easter egg]]<br />
The second Easter Egg is brought up by issuing a CLS (clear screen) command with a parameter from 9 to 255 on the 40 or 80 column screen. (A similar egg exists in the original Color Computer 1/2 modles, though it reads "Microsoft".)<br />
[[Image:CLS100.png|right|thumb|320px|CLS 100 hi-res screen easter egg]]<br />
The third easter egg is brought up by switching to the 40 or 80 column screen and issuing a CLS 100. This only works once, unless the machine is reset. Typing the command again just displays the Microware message.<br />
[[Category:Articles]]</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=User:Tlindner&diff=3543User:Tlindner2007-06-02T16:26:34Z<p>Tlindner: </p>
<hr />
<div>My web blog can be found [http://tlindner.macmess.org/ here]<br />
<br />
Articles I've written for this Wiki:<br />
*[[Sampling]] Sampling the Color Computer Joystick.<br />
*[[MMU_RAMROM_Mode|MMU RAM/ROM Mode]] Explanation on how the RAM/ROM mode interacts with the MMU on the CoCo 3</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=Articles&diff=3529Articles2007-05-02T03:12:10Z<p>Tlindner: Added article</p>
<hr />
<div>{{NavArticles}}<br />
*[[Sampling]] Sampling the Color Computer Joystick.<br />
<br />
*[[Semigraphics Routines]] Useful ASM routines for dealing with Semigraphics 64x32 mode<br />
<br />
*[[CoCo3 Easter Egg]] Color Computer 3 Easter Egg<br />
<br />
*[[Sounds of the Hounds]] The Myth and Reality of the CoCo's biggest April Fool's Gag<br />
<br />
*[[MMU_RAMROM_Mode|MMU RAM/ROM Mode]] Explanation on how the RAM/ROM mode interacts with the MMU on the CoCo 3<br />
<br />
[[Category:Articles]]</div>Tlindnerhttps://www.cocopedia.com/wiki/index.php?title=MMU_RAMROM_Mode&diff=3528MMU RAMROM Mode2007-05-02T02:57:40Z<p>Tlindner: </p>
<hr />
<div>Color Computer 3 Memory Management Unit in ROM/RAM<br />
<br />
The MMU in the CoCo 3 has access to 64 blocks of RAM each 8 kilobytes in size. In ROM/RAM mode the last four blocks don't access RAM. They access either internal or external ROM. The RAM/ROM mode is entered by writing any value to address $FFDE. RAM mode is selected by writing any value to address $FFDF.<br />
<br />
In ROM/RAM mode there are three different ROM configurations available. They are selected by setting bits 1 and 0 of address $FF90 to:<br />
<br />
{| border="1" cellspacing="0" cellpadding="5" align="center"<br />
! $3C<br />
! $3D<br />
! $3E<br />
! $3F<br />
! Bit Value<br />
|-<br />
| align="center" | Extended Color BASIC<br />
| align="center" | Color BASIC<br />
| align="center" colspan="2" | 16K Cartridge ROM<br />
| align="center" | 0X<br />
|-<br />
| align="center" | Extended Color BASIC<br />
| align="center" | Color BASIC<br />
| align="center" | Reset Initialization<br />
| align="center" | Super Extended Color BASIC<br />
| align="center" | 10<br />
|-<br />
| align="center" colspan="4" | 32K Cartridge ROM<br />
| align="center" | 11<br />
|}<br />
<br />
<br />
{| border="1" cellspacing="0" cellpadding="5" align="center"<br />
|+ MMU Slot description<br />
|-<br />
! CPU Address Range<br />
! Slot Address<br />
|-<br />
| $0000 - $1FFF<br />
| Slot 0: $FFA0, $FFA8<br />
|-<br />
| $2000 - $3FFF<br />
| Slot 1: $FFA1, $FFA9<br />
|-<br />
| $4000 - $5FFF<br />
| Slot 2: $FFA2, $FFAA<br />
|-<br />
| $6000 - $7FFF<br />
| Slot 3: $FFA3, $FFAB<br />
|-<br />
| $8000 - $9FFF<br />
| Slot 4: $FFA4, $FFAC<br />
|-<br />
| $A000 - $BFFF<br />
| Slot 5: $FFA5, $FFAD<br />
|-<br />
| $C000 - $DFFF<br />
| Slot 6: $FFA6, $FFAE<br />
|-<br />
| $E000 - $FFFF<br />
| Slot 7: $FFA6, $FFAF<br />
|}<br />
<br />
<br />
The ROM pages ($3C-$3F) can be written to any of the eight available MMU slots. In all cases the last two bits of the page are ignored by the MMU and substituted by the last two bits of the slot number.<br />
<br />
For example, writing $3D to slot 2 of the MMU does not map the second 8k page of ROM to addresses $4000-$5FFF. It maps page $3E (the third ROM page), because:<br />
<br />
<br />
[[image:ROMRAM.png|center]]<br />
<br />
This essentially means that page $3C will only appear in slots 0 and 4; $3D in 1 and 5; $3E in 2 and 6; $3F in 3 and 7.</div>Tlindner