
Casio FX-750P Personal Computer
The Casio FX-750P was released in 1984 is similar in many ways to the Casio PB-700 / PB-770. The keyboard layout is similar as is the overall size and layout. This model was released around the same time as the Radio Shack PC-3 (Sharp PC-1251) and the Tandy PC-4 (Casio PB-100).
I acquired the Casio FX-750P(F) while looking for a Casio PB-2000C. This model happened to be part of a bundle of pocket computers which came with the Casio PB-2000C. I had not sought out this model in particular, but I found it quite interesting due to the RAM Card system.
I usually compare other models released around the same time, both by Sharp and Casio, which gives some relative comparison in features and advancements of the time. As with any pocket computer other than the Radio Shack models, I find it difficult to pinpoint exactly when these were released and when, if ever, they were available in the United States. Even if available here, I have no familiarity with where these would be sold.
Throughout this post, unless otherwise stated, the FX-750P and FX-750P(F) are referenced interchangeably.
This model, the FX-750P (and the PB-410) introduced the concept of removable RAM Cards, one of the main marketing strategies for the model. Of course the Sharp PC-1500 released a year or so prior had the option of a removable RAM / ROM card.

The FX-750P was available at the same time as the PB-110 (similar to the PB-410) and PB-700 which is also shown in the advertisement above. A size and layout comparison between these is shown below:


RAM Card System
The concept of removable RAM cards allows for swapping of programs very quickly, compared to loading programs from cassette tape. Each RAM card has a button-cell battery to maintain the contents when removed from the computer. This was unique compared to the Sharp PC-1500 / TRS-80 PC-2 and PB-700 / PB-770 because these cards contained both programs and data and the memory management system was designed to allow them to be swapped out.

Casio offered three RAM Card sizes, the RC-2, RC-4, and RC-8. This provided 2 KB, 4 KB, and 8 KB of RAM respectively.




The RAM cards have a sliding cover to protect the contacts and there is a corresponding zebra strip in each of the slots in the computer:


It is interesting that the 4 KB RAM Card uses double the power than the 2 KB RAM Card, albeit still a very low amount of current to keep the memory contents when outside of the pocket computer. Casio claims the RC-2 battery will last 2 years when outside of the pocket computer, and the RC-4 battery will last one year.
Casio states that any combination of RAM Cards can be used, provided that slot 0 is used when only one RAM Card is used, and, the same combination is always used when attempting to swap cards, in order to keep the programs and/or data intact.
Casio provided a sticker to place on the RAM card to indicate the slot for placement – this is to help ensure they do not get reversed.

The FX-750P came with one RC-4 4 KB RAM Card when purchased. The unit I had acquired included the RC-4 RAM Card.
The FX-750P that I acquired is actually the FX-750P(F), which has removable covers for the RAM Cards, as opposed to the sliding tray design depicted in the owner’s manual and similar to the Casio PB-410. I am unable to find an owner’s manual for this specific variant.
The FX-750P(F) version was an improvement over the sliding tray version, which is also present on the PB-410:

The older “tray” style was a bit kludgy to remove and add a RAM Card. The tray does not fully extend out from the pocket computer, and the RAM Card has to be angled in and out accordingly. When I was restoring a Casio PB-410, I needed to clean not only the open/lock switch as with this FX-750P(F), but the contact strips as well. On the PB-410 or “tray” version of the RAM Card system, the back cover of the pocket computer needs to be removed for cleaning the contact strips.
Lastly, when removing the back cover, care needs to be taken to avoid the springs from the trays flying out.


The newer RAM Card system on the FX-750P(F) has zebra strips for easy cleaning, increased durability, and a completely removable cover for easier swapping of RAM Cards.
The FX-750P(F) not only had an improved RAM Card slot (versus the tray), Casio released the RC-8 RAM Card with this model, which was an 8 KB RAM Card. This meant that the FX-750P(F) can have up to 16 KB of RAM.
Batteries
The Casio FX-750P uses two CR-2032 button cell batteries and each RAM Card uses a CR-2016 button cell battery. The CR-2032 batteries for the main unit is consistent with many other Sharp and Casio models.
LCD Display
The LCD display is 24 characters wide with a single line. The display is not dot addressable and uses a 5 x 7 font for each character. It has various mode indicators above the 24 character alphanumeric display. There is also a contrast wheel on the right side of the unit, similar to many other models.
The FX-750P has only upper case characters and does not support any mathematic or engineering symbols other than the basic operators:

Keyboard
The keyboard has a “qwerty” layout with numeric keys off to the right side of the unit. Basic calculations can be performed using the number pad and enter key, directly upon power up with no special mode commands needed.
Similar to the PB-700 / PB-770, there is no mode switch to change between programming mode and calculator mode. The ENTER key is used for calculations, while the Return key is used to enter program lines or commands:

I often found myself pressing the ENTER key accidentally instead of the Return key when entering a command or program line, only to have an error response on the screen.
Buzzer
The FX-750P has a buzzer, although pitch is either low or high, and duration is not adjustable. This is useful for troubleshooting if the display is not working. From BASIC, you can use the BEEP, BEEP 0, or BEEP 1 commands to test if the computer is working.
Expansion Port
The FX-750P has a 12-pin expansion port, which is similar to the Casio PB-100, PB-410, FX-780, FX-790 (Tandy PC-4, PC-5 and PC-6).

Even though the connector is the same, the Casio FP-12S printer is not compatible with this pinout.
Owner’s Manuals
I was unable to find the FX-750P(F) version of the owner’s manual, but the FX-750P version is posted below:
Restoration and Repairs
The unit I had acquired was a bit worn with a fairly scratched screen. The unit looked heavily used, but not abused, dented, or with missing pieces. I added new CR-2032 batteries to the unit and turned the power switch on, but nothing appeared on the display. I suspected an issue with either the LCD itself, or, perhaps the RAM Card system.
I cleaned the connectors for the RAM card. I cleaned both the zebra strips in slot 0 and slot 1 with IPA, and the connectors on the RAM card itself. I then put the card back into slot 0. I turned it on and it worked! I saw the familiar Casio “READY P0” on the LCD display.
However, the display contrast was quite dim and was with the contrast (darkness) turned all the way up. It seemed to fade with pressure on the power switch.
I took apart the pocket computer to clean the power switch contacts with some IPA. The power switch uses similar contacts as the keys.

Upon taking the unit apart, I observed the RAM Card locking mechanism. It is more than a simple mechanical locking mechanism keeping the card slots closed. There is a small PCB and contacts on the locking mechanism:

While I had the unit apart, I cleaned these contacts with some DeoxIT D5 as well as the RAM Card contacts with IPA and the power switch contacts. The fading contrast issue was solved – the display was plenty dark for any angle:

The locking mechanism ensures that the computer is not powered on while taking out either RAM Card. The unit will power up only if the locking mechanism is in the center position, which locks both RAM Card covers.
Memory Management
Since one or two RAM Cards can be used, and cards of either 2 KB, 4 KB, or 8 KB can be used in any combination, some basic memory management is employed. There is a separation of program space and data (variable) space, each with its own command to see how much RAM each is consuming:
SYSTEM P
SYSTEM V
When changing RAM Card configuration, the system will detect change(s), and prompt to initialize when powering up, with “CLEAR D: Y/N” and/or “CLEAR P: Y/N”. If Y is pressed, then the corresponding RAM area will be initialized. If the RAM Cards present are in the correct or expected slots, then no prompt will be given, and the pocket computer will display “READY P0”.
Note that this pocket computer does not have any internal RAM whatsoever, which means at least one RAM Card is required in order for the pocket computer to function. If no RAM Card is present, the pocket computer will display “???” when powered on.
Similar to every other pocket computer (Sharp or Casio), variable space and system area consume part of the memory, regardless of how much RAM is available, and is usually a fixed minimum amount:

Since the FX-750P comes with a 4 KB RAM Card, the user area remaining after initialization is 2,800 bytes. If a second RAM Card is added, then the user area is increased. However, the system area size remains the same, which is an efficient use of the additional RAM Card.


When looking at the one versus two RAM Card configuration, it is now clear as to why a RAM Card in slot 1 would become the “data” card while the RAM Card in slot 0 would be the program card.
One of the differences with the FX-750P(F) is that it supports the RC-8 RAM Cards, which add 8 KB of RAM each.
Possible Issue with Only One RAM Card
If I have only a single RAM Card installed in slot 0 in my FX-750P(F), each time it powers on, I am prompted to clear the data (variable) space. This also occurs when auto power off happens, which is not convenient. This means that variable storage is not persisting on my unit when only a single RAM Card is present.
However, if I add a second RAM Card in slot 1, then the problem disappears. I have yet to solve this problem.
In addition to the clear data prompt, I also observed that array variable declaration was not working when only one RAM Card was present:
DIM C(3)
C(0) = 1
I received a UV Error when attempting to assign a value to the first slot in a 4 slot numeric array. LISTV showed the following:
C$()
However, when another RAM Card was present in slot 1, the commands worked, and LISTV showed:
C()
I have yet to solve this issue, and it is not noted in the user guide that variable declaration via the DIM command requires a second RAM Card.
BASIC Programming
As with most early pocket computers, this model is programmable in BASIC and supports quite a full line of functions compared to other models. It supports DATA, READ, RESTORE for data tables as well as character and string functions. It supports variable and array definitions and expansion and scientific functions as well.
FA-20 Repair
As I often mention, pocket computers without a printer and/or cassette interface are not as interesting to experiment with, simply due to the lack of ability to save and load programs and print out results, mazes, or banners for example.
The Casio FX-750P has the optional FA-20, which is a thermal printer with a cassette interface. I happened to come across an FA-20 on an auction site for a fair price. The seller had thought the FA-20 was missing a module or part, due to the small compartment on the upper right side designed to hold a RAM Card. The price was a bit lower than others in far worse condition than this one.


All of the accessories including the case were included. The RC-2 RAM Card pictured below was from a PB-410, and added for illustration purposes for this compartment.

The FA-20 comes with a case which holds everything needed to take the unit portable. The FA-20 is very compact and quite a bit smaller than the FA-10 for the PB-700 / PB-770.
As with almost all pocket computer printers of the era, an internal NiCd battery pack is often leaking within the unit itself:

The NiCd pack in this unit had been leaking a bit:

The corrosion followed the positive lead from the battery pack all the way to the PCB:

Since this area on the PCB has no components on the other side and is not crucial, I avoided extensive cleaning of the area and tacked on a new positive lead further away from this corrosion. I used some vinegar and IPA to clean off as much as I could, and the solder on these pads was not flowing with a normal amount of heat.

The leakage from the old NiCd pack had made the plastic holding tab on the right side very brittle, and it had snapped off at some point. Since the holding tab was broken off and brittle, I avoided altering the layout of the new battery pack. Instead, I simply hot-glued it in place, roughly in the same spot as the old pack.
The new pack I used was a ready-made “AAA” pack with 4 NiMH cells rated at 800 mAh. After replacing the battery pack, the printer showed signs of life!
It should be noted that the charger, Casio model CHA-1, is 20 mA at 9 volts, center pin negative:

Since this charger provides only 20 mA, and the pack I used as a replacement is 800 mAh, if the pack were completely discharged, it would take 40 hours to recharge the pack. Since there is no charge controller on the FA-20, it would not be recommended to overcharge the battery pack.
Further, since the output of this charger is 9 volts, and the battery pack is 4.8 volts, I would not recommend powering the FA-20 via the charger without a battery pack installed. Often times the battery pack acts as a voltage regulator, ensuring the connected charger does not exceed the voltage limit of the circuitry inside of the FA-20. In other words, always have a working battery pack installed in the FA-20. The charger provided does not provide nearly enough current needed to power the printer by itself.
In addition to the battery pack replacement, I lubricated the printer mechanism.
It would appear my unit was manufactured on or after September 2, 1983, according to the date stamped on the motor on the printer mechanism.
Printer and Paper
The FA-20 printer is thermal, identical to the Radio Shack PC-4 and PC-6 printer, as well as the Casio FP-12S. It uses the same thermal paper width, 1 1/2″, which is available on Amazon.
The printing mechanism is fairly slow, since the printer head needs to travel the paper width, and the paper feed is performed on the trip back to the left hand side of the mechanism. It is quite a simple design, using a single motor to drive the print head and paper. I did notice that the mechanism and logic will return the print head and feed paper if a line is shorter than 20 characters (the full width of a line). If a line is not a full 20 characters, then the print speed is a bit faster.
Testing the Printer
Similar to other Casio models, the printer can be turned on to echo the display:
PRINT ON
A PRTON indicator on the top of the LCD will be present when this feature is enabled. To disable this feature, use the PRINT OFF command.
My unit happens to have a line which is “dead” on the thermal print head, or, there is dust or something else in the way. I attempted cleaning it by running a thin piece of napkin soaked in IPA through the paper feeder, but it did not solve the problem.
Note: Avoid getting IPA on any of the plastic surfaces of the FA-20. IPA will immediately dissolve the layer of paint on the plastic. Ask me how I know this.

Note that the line feed button will not function unless the FX-750P is attached and turned on.
Owner’s Manual
My FA-20 did not come with a user manual and I was not able to find one online.
Banner Program
One of the ways I become familiar with the BASIC capabilities of a pocket computer and its printer is to write a banner program. For each model I become familiar with, the banner program might have different variations depending on what support and features are available on a given model.
The FX-750P supports a similar BASIC format as the PC-6 (Casio FX-780P), and rather than starting from scratch on a banner program for the FX-750P, I copied the PC-6 version I wrote and modified it a bit. Similar to the PC-6 version, this version of the banner program embeds the font data within the program itself, utilizing the DATA option in BASIC. This font bitmap data is based on a 5 x 7 character set, and includes A – Z, 0 – 9 and a space character.
Of course additional character font data can be added if needed, and this would simply consume more bytes within the program. My banner program for the PC-4 is probably my most compact yet, but this model has 2,800 bytes of memory out of the box, at a minimum. If you have two RC-4 RAM Cards or two RC-8 RAM Cards, then much more space for font data is available.
Very little modification was necessary for this version, with the exception of the MID$ function. The FX-750P does not have the limited MID$ function like the PC-6 did. MID$ on the FX-750P can work on any string variable, and is not limited to the special variable “$” like the PC-6 was.
I also optimized this version a bit for speed. I took advantage of the RESTORE function on this model supporting an optional line number as an argument. This allows the program to jump directly to a specific line within a DATA array. Further, the ASC function which converts a character string to an ASCII equivalent allows me to take the user input and directly jump to a location within the DATA array for each character needed.
With these two commands, I was able to organize a DATA table for the font data to align with ASCII equivalents for each character. For example, the number “0” (zero) has an ASCII value of 48. I can therefore store the font data for this character (5 bytes of font data) at line number 48. I can then use the command RESTORE 48 to jump directly to that position in the DATA table.
This optimization greatly improves the speed compared to the previous banner versions. To add additional characters of font data, simply add them with the line number that corresponds to the ASCII equivalent.
The entire program with the font data consumes just 1,525 bytes in total. Due to the way the FX-750P handles string variables, I used a “registered variable”, V1$, as opposed to V$ so that the banner text can be up to 16 characters instead of the 7 character limit of fixed variables.

A WAV file for the banner program is included below:
To load the program, use the LOAD command without any parameters:
LOAD
The source is included below:
CASIO FX-750P BANNER PROGRAM VERSION 1.0
32 DATA 0,0,0,0,0
48 DATA 3E,45,49,51,3E
49 DATA 0,40,7F,42,0
50 DATA 46,49,51,61,42
51 DATA 31,4B,4D,49,41
52 DATA 10,7F,12,14,18
53 DATA 39,45,45,45,27
54 DATA 30,49,49,4A,3C
55 DATA 3,5,79,1,1
56 DATA 36,49,49,49,36
57 DATA 1E,29,49,49,6
65 DATA 7C,12,11,12,7C
66 DATA 36,49,49,7F,41
67 DATA 22,41,41,41,3E
68 DATA 3E,41,41,7F,41
69 DATA 41,49,49,49,7F
70 DATA 1,9,9,9,7F
71 DATA 39,49,41,41,3E
72 DATA 7F,8,8,8,7F
73 DATA 0,41,7F,41,0
74 DATA 1,7F,41,40,20
75 DATA 41,22,14,8,7F
76 DATA 40,40,40,40,7F
77 DATA 7F,2,C,2,7F
78 DATA 7F,10,8,4,7F
79 DATA 3E,41,41,41,3E
80 DATA 6,9,9,9,7F
81 DATA 5E,21,51,41,3E
82 DATA 46,29,19,9,7F
83 DATA 32,49,49,49,26
84 DATA 1,1,7F,1,1
85 DATA 3F,40,40,40,3F
86 DATA 7,18,60,18,7
87 DATA 7F,20,18,20,7F
88 DATA 63,14,8,14,63
89 DATA 3,4,78,4,3
90 DATA 43,45,49,51,61
100 CLEAR : WAIT 0
110 INPUT “TEXT”;V1$
120 L = LEN(V1$)
130 FOR C = L TO 1 STEP -1
READ TO LOCATION IN DATA ARRAY FOR CURRENT CHAR BITMAP
140 E$ = MID$(V1$,C,1) : U = ASC(E$) : RESTORE U
170 READ A$
READ EACH ROW IN BITMAP FOR THIS CHARACTER
200 FOR D = 1 TO 5
205 A$ = “&H” + A$ : LPRINT " ";
215 B = VAL(A$)
220 FOR F = 1 TO 7
230 H = FRAC(B/2) : IF H > 0 THEN LPRINT CHR$(135);CHR$(135); ELSE LPRINT " ";
260 B = INT(B/2) : NEXT F
270 LPRINT ""
NEXT CHARACTER
280 READ A$ : NEXT D
290 PRINT "" : LPRINT ""
300 NEXT C
DONE
310 LPRINT "" : LPRINT "" : BEEP 0
320 END
Maze Program
Another program that is interesting to write for these pocket computer is a maze program. Since the FX-750P has a printer option, I can generate a maze and then print it. The challenge however, is to have enough memory (RAM) in order to generate the maze using the algorithm chosen. The simplest algorithm to use for maze generation is the backtracking algorithm. It can easily be programmed in BASIC.
The algorithm requires the canvas size to be odd in both width and height, for example, 19 x 19, and not 20 x 20. The requirement for the canvas dimensions being odd instead of even is due to the interior lines or blocks needed for the maze. For example, lets consider a maze on a canvas size of 3 x 27:

The maze itself has a single pathway, given the height of the canvas is 3 pixels, and the pathway is in between the top and bottom walls. The next incremental height we can consider would be 5 pixels high, not 4 pixels. The same can be said for the width, for example flipping the maze dimensions to a 3 x 27 canvas. Therefore, the height and width of the canvas must always be an odd number.
A maze generator would need an actual canvas to work with (either on the screen, in memory, or both), and it would need a stack to push and pop in order to track where the algorithm has “walked” before. The algorithm will “push” to the stack as it walks uncharted territory on the canvas, and “pop” from the stack when it needs to back up (if it hits a wall or adjacent open space). The backtracking algorithm randomly chooses a direction with each step, with one of four possible directions (up, down, left or right). It will not be able to choose a direction that would hit a wall or an adjacent open space. Therefore, if no directions are possible for travel in the current position, it must “backtrack” until a direction is possible.
Once the algorithm reaches back to it’s start position, the maze is complete. The start position is randomly chosen, and must be an odd number for the x and y coordinate. The odd numbered coordinates are spaces marked open during traversal of the path, and the even numbered coordinates become the walls of the maze. Therefore, each step in the “walk” is really 2 pixels away from the current position (skipping over the even numbered coordinates), in any direction. When a walk is performed and a position is marked as open, the adjoining position (the even coordinate) between the previous location and current location is also marked as open.
Below is an example of the backtracking algorithm animated with JavaScript from professor-l Elle:
There are some prerequisites which are needed for a pocket computer to generate a maze using the backtracking algorithm:
- A dot addressable display and/or a printer
- Enough RAM to hold the canvas and/or stack for the desired width and height of the maze
- Random number generator
The FX-750P meets the prerequisites for a maze generator. The FA-20 and at least a 4 KB RAM Card are required. Due to the array variable declaration I observed, a secondary RAM Card is needed. In my example, I used a 2 KB RAM Card as the secondary card.
Some pocket computers which have a dot addressable display have support to not only turn on or off a pixel at a time, but they also support reading the status of a pixel, eliminating the need to use additional user RAM for tracking pixel status. This model does not have a dot addressable display which means I will need to draw the maze using a canvas in user memory. This will require a bit more user RAM than other pocket computer models would require.
Memory Management
The larger the desired maze size, the more memory will be required to generate the maze. Since the FX-750P does not have a dot addressable display, the only output for the generated maze would be the printer. The FA-20 printer has a maximum character width of 20 characters. Since the dimensions of the maze must be odd-numbered, this limits the maximum maze width to 19. Of course, the height can exceed 19 if desired.
Many pocket computers have PEEK and POKE commands in BASIC which allow for memory space to be consumed directly, byte by byte. Pocket computers which do not have these commands are limited to the built-in variable management supported by the model.
For example, the worst case scenario would be a pocket computer which does not support PEEK and POKE and uses 8 bytes for each numeric variable. This is the most common memory management scheme for simple pocket computers. If I needed to generate a maze on a 19 x 19 canvas in memory, this would consume 2,888 bytes for the canvas alone, not to mention the stack needed for the backtracking algorithm. If PEEK and POKE were supported, then only a single byte would be needed for each pixel on the canvas and stack value. This would be the best case scenario.
Unfortunately the FX-750P does not support PEEK and POKE. However, it does support “half-precision” variables, meaning numeric variables can consume 4 bytes instead of 8 bytes. For example, to allocate a 25 position half-precision array, the format would be:
DIM C!(24)
The array of 25 half-precision variables would consume 100 bytes of user RAM. Therefore, for a canvas size of 19 x 19, 1,444 bytes of user RAM would be required.
In addition to the canvas, I need memory for the stack. The stack holds previously open spots when walking the canvas, using the backtracking algorithm. Since I need to track X and Y coordinates for the path, I need two positions in the stack for each coordinate. The total number of entries needed for the stack varies depending on the longest possible “path”. The worst case scenario would be a path which starts in a corner and winds along the outside walls until reaching the center. This of course is nearly impossible given the randomness of the direction chosen. Therefore, the stack size is chosen as an average maximum. I chose a stack size of 1/2 the height and width of the canvas, and one stack for the X coordinates, and another stack for the Y coordinates.
For a 19 x 19 canvas size, the stack would require another 1,444 bytes total. Note that the stack size could be cut in half with some creative use of the 4 bytes in each half-precision variable. Since the dimensions of the canvas will not exceed two digits, an X and Y coordinate can be appended together:
1311
In the example above, X would be 13, and Y would be 11. The numeric value 1311 can be stored in a single half-precision variable. To extract the X and Y coordinates, one could use the STR$ function to convert the numeric value to a string, then use the LEFT$ and RIGHT$ string functions to grab the upper and lower half from the combined string, then use the VAL command to convert each half of the combined string back to numeric values.
This process can be reversed using string concatenation and the STR$ function. This assumes leading zeros are preserved.
Since the size of the printer limits the width to 19, unless the height is increased far beyond 19, cutting the stack size in half is not worthwhile. The decrease in speed for this conversion process might pose an issue.
Oddities Between Half-Precision and Single-Precision Variables
When I was writing the FX-750P version of the maze program, I ran into some odd issues when using half-precision arrays. I would observe that in some cases, the half-precision values would become decimal values, while the entire algorithm works with integers. For example,
X = A!(S)
X would sometimes display a value:
3.00<
This was not always the case, and it appeared to be somewhat random in the sense that it depended on array size, previous calculations and assignments from single-precision variables. I did not find anything specific in the owner’s manual regarding assignments between single-precision and half-precision variables.
Over time, I would see values that had some small increment away from the integer value expexted:
0.97<
I ended up adding a ROUND function to force the conversion to the intended integer values:
X = ROUND(A!(S),-1)
The same issue would occur for comparisons as well:
IF C!(X,Y) = 0 THEN LPRINT CHR$(135);
Depending on the size of C!, sometimes the comparison would not see an exact zero value. The ROUND function would then ensure this comparison would work correctly:
IF ROUND(C!(X,Y),-1) = 0 THEN LPRINT CHR$(135);
Or:
IF C!(X,Y) < 1 THEN LPRINT CHR$(135);
Results
The maze program works and it is not as slow as I would have thought, for a canvas size up to 19 x 19. Due to the printer character dimensions being more tall than wide, a 1:1 aspect ratio is accomplished by printing two blocks horizontally for every pixel on the canvas. This aspect ratio is shown in the sample printout below, on the left. The result of printing one character per pixel is shown to the right. The latter results in a somewhat “stretched” appearance.

The line spacing is not controllable on these simple printers.
A WAV file for the maze program is included below:
The program listing for the FX-750P version of the maze program is included below:
FX-750P MAZE GENERATOR VERSION 1.0
10 CLEAR : W = 19 : H = 19 : DIM C!(W,H) : DIM N!(3,1)
20 DIM A!(W*H*0.5) : DIM B!(W*H*0.5)
30 W = W - (W MOD 2) + 1
40 H = H - (H MOD 2) + 1
CUT OPENING AT TOP
80 C!(1,0) = 1
RANDOM START SOMEWHERE
100 Y = ROUND(RND * (H-2),-1) + 1
110 IF Y MOD 2 = 0 THEN 100
120 X = ROUND(RND * (W-2),-1) + 1
130 IF X MOD 2 = 0 THEN 120
140 C!(X,Y) = 1
150 A!(S) = X : B!(S) = Y : S = S + 1
160 GOTO 210
POP NEXT OPEN SPACE OFF STACK
200 IF S = 0 THEN 580
205 PRINT CHR$(236); S = S - 1 : X = ROUND(A!(S),-1) : Y = ROUND(B!(S),-1)
GET ADJACENT SPACES NOT OPEN YET
210 GOSUB 1000
IF NONE FOUND, POP PREVIOUS OPEN SPACE OFF STACK
500 IF D = 0 THEN 200
RANDOM CHOICE MADE, OPEN AND JOIN TO PREVIOUS
530 Z = ROUND(RND*(D-1),-1) : PRINT CHR$(237);
540 L = ROUND(N!(Z,0),-1) : M = ROUND(N!(Z,1),-1) : A!(S) = L : B!(S) = M : S = S + 1
550 C!(L,M) = 1
560 C!((L+X)/2),(M+Y)/2) = 1
570 X = L : Y = M : GOTO 210
CUT OPENING AT BOTTOM, BEEP AND PAUSE, THEN PRINT
580 C!(W-2,H-1) = 1 : C!(W-2,H-2) = 1
590 BEEP
610 GOSUB 3000
620 END
FIND ADJACENT CLOSED BLOCKS
1000 D = 0 : G = Y + 2 : I = Y - 2 : E = X + 2 : F = X - 2
1010 IF I <= 0 THEN 1030
1015 IF C!(X,I) = 1 THEN 1030
1020 N!(D,0) = X : N!(D,1) = I : D = D + 1
1030 IF G >= H - 1 THEN 1050
1035 IF C!(X,G) = 1 THEN 1050
1040 N!(D,0) = X : N!(D,1) = G : D = D + 1
1050 IF F <= 0 THEN 1070
1055 IF C!(F,Y) = 1 THEN 1070
1060 N!(D,0) = F : N!(D,1) = Y : D = D + 1
1070 IF E >= W - 1 THEN 1090
1075 IF C!(E,Y) = 1 THEN 1090
1080 N!(D,0) = E : N!(D,1) = Y : D = D + 1
1090 RETURN
PRINT CANVAS
3000 FOR Y = 0 TO H - 1
3010 FOR X = 0 TO W - 1
3020 IF ROUND(C!(X,Y),-1) = 0 THEN LPRINT CHR$(135); ELSE LPRINT " ";
3040 NEXT X
3050 LPRINT ""
3060 NEXT Y
3070 LPRINT "" : LPRINT "" : LPRINT ""
3080 RETURN
Variables
A! - Open Space Stack, X
B! - Open Space Stack, Y
C! - Canvas
N! - Adjacent closed spaces
Z - Index chosen within closed spaces
D - Closed space count
E - Current X position + 2
F - Current X position - 2
G - Current Y position + 2
I - Current Y position - 2
H - Canvas height
L - Temp
M - Temp
S - Open Space stack size
W - Canvas width
X - Current X position
Y - Current Y position
To change the aspect ratio to be closer to 1:1, set the width not to exceed 9 and change line 3020 to:
3020 IF ROUND(C!(X,Y),-1) = 0 THEN LPRINT CHR$(135);CHR$135; ELSE LPRINT " ";
Final Thoughts
The Casio FX-750P was a useful model with quite a bit of capability with it’s BASIC support and plenty of expandable RAM. The RAM Card feature seemed to me to be a good solution to swapping programs from cassette tape – a major improvement in speed and convenience. However, care was needed to ensure programs and data did not cross their threshold from one RAM Card into the other, otherwise swapping was not possible without corruption. Further, cards needed to be placed in the same positions each time.
I found a few issues with the half-precision variable support, as well as issues using defined variables with only a single RAM Card installed. However, I was able to work around those issues and create a version of both the banner program and the maze program. The maze program required a secondary 2 KB RAM Card, but was easily able to generate a 19 x 19 maze with room to spare. This was the first pocket computer with such a small printer that I wrote the maze program for. Writing these types of programs is a quick way to learn the BASIC and printer capabilities for any particular pocket computer.
This was an interesting model to experiment with, and if it were not bundled in with a bunch of other pocket computers, I would likely have not had the chance to use one and become familiar with it.