{{htmlmetatags>metatag-robots=()
metatag-title=(The IBM Personal Computer Donkey | ugBASIC User Manual)
metatag-keywords=(ugBASIC,Commodore 64,Commodore PLUS/4,ZX Spectrum)
metatag-description=(An isomorphic language for retrocomputers)
metatag-media-og:image=(:ugbasic:logo-ugbasic-fb.png)
metatag-og:title=(The IBM Personal Computer Donkey | ugBASIC User Manual)
metatag-og:description=(An isomorphic language for retrocomputers)
}}
====== ugBASIC User Manual ======
===== The IBM Personal Computer Donkey =====
==== PURPOSE ====
Version 1.10 (C)Copyright IBM Corp 1981, 1982 Licensed Material - Program Property of IBM
==== SOURCE CODE ====
975 DEF SEG: POKE 106,0
980 SAMPLES$="NO"
990 GOTO 1010
1000 SAMPLES$="YES"
1010 KEY OFF:SCREEN 0,1:COLOR 15,0,0:WIDTH 40:CLS:LOCATE 5,19:PRINT "IBM"
1020 LOCATE 7,12,0:PRINT "Personal Computer"
1030 COLOR 10,0:LOCATE 10,9,0:PRINT CHR$(213)+STRING$(21,205)+CHR$(184)
1040 LOCATE 11,9,0:PRINT CHR$(179)+" DONKEY "+CHR$(179)
1050 LOCATE 12,9,0:PRINT CHR$(179)+STRING$(21,32)+CHR$(179)
1060 LOCATE 13,9,0:PRINT CHR$(179)+" Version 1.10 "+CHR$(179)
1070 LOCATE 14,9,0:PRINT CHR$(212)+STRING$(21,205)+CHR$(190)
1080 COLOR 15,0:LOCATE 17,4,0:PRINT "(C) Copyright IBM Corp 1981, 1982"
1090 COLOR 14,0:LOCATE 23,7,0:PRINT "Press space bar to continue"
1100 IF INKEY$<>"" THEN GOTO 1100
1110 CMD$ = INKEY$
1120 IF CMD$ = "" THEN GOTO 1110
1130 IF CMD$ = CHR$(27) THEN GOTO 1298
1140 IF CMD$ = " " THEN GOTO 1160
1150 GOTO 1110
1160 DEF SEG=0
1170 IF (PEEK(&H410) AND &H30)<>&H30 THEN DEF SEG:GOTO 1291
1180 WIDTH 80:CLS:LOCATE 3,1
1190 PRINT "HOLD IT!"
1200 PRINT "YOU'RE NOT USING THE COLOR/GRAPHICS MONITOR ADAPTER!"
1210 PRINT "THIS PROGRAM USES GRAPHICS AND REQUIRES THAT ADAPTER."
1220 PRINT "PRESS THE SPACE BAR TO CONTINUE."
1230 DEF SEG
1240 IF INKEY$<>"" THEN GOTO 1240
1250 CMD$ = INKEY$
1260 IF CMD$ = "" THEN GOTO 1250
1270 IF CMD$ = CHR$(27) THEN GOTO 1298
1280 IF CMD$ = " " THEN GOTO 1298
1290 GOTO 1250
1291 KEY OFF
1292 ON ERROR GOTO 1295
1293 PLAY "p16"
1294 GOTO 1300
1295 COLOR 31,0,0
1296 PRINT "THIS PROGRAM REQUIRES ADVANCED BASIC -- USE COMMAND 'BASICA'":COLOR 15,0,0:FOR I=1 TO 9000:NEXT: RESUME 1298
1298 ON ERROR GOTO 0
1299 SCREEN 0,1:IF SAMPLES$="YES" THEN CHAIN"samples",1000 ELSE COLOR 7,0,0:CLS:END
1300 REM
1410 COLOR 0
1420 DEFINT A-Y
1440 SCREEN 1,0:COLOR 8,1
1450 DIM Q%(500)
1460 DIM D1%(150),D2%(150),C1%(200),C2%(200)
1470 DIM DNK%(300)
1480 GOSUB 1940
1490 GOSUB 1780
1500 CLS
1510 DIM B%(300)
1520 FOR I=2 TO 300:B%(I)=-16384+192:NEXT
1530 B%(0)=2:B%(1)=193
1540 REM
1550 CX=110:CLS
1590 LINE (0,0)-(305,199),,B
1600 LINE (6,6)-(97,195),1,BF
1610 LINE (183,6)-(305,195),1,BF
1620 LOCATE 3,5:PRINT "Donkey"
1630 LOCATE 3,29:PRINT "Driver"
1631 LOCATE 19,25:PRINT"Press Space ";
1632 LOCATE 20,25:PRINT"Bar to switch";
1633 LOCATE 21,25:PRINT"lanes ";
1635 LOCATE 23,25:PRINT"Press ESC ";
1636 LOCATE 24,25:PRINT"to exit ";
1640 FOR Y=4 TO 199 STEP 20:LINE(140,Y)-(140,Y+10):NEXT
1650 CY=105:CX=105
1660 LINE (100,0)-(100,199):LINE(180,0)-(180,199)
1670 LOCATE 5,6:PRINT SD:LOCATE 5,31:PRINT SM
1680 CY=CY-4:IF CY<60 THEN 2230
1690 PUT (CX,CY),CAR%,PRESET
1700 DX=105+42*INT(RND*2)
1710 FOR Y=(RND*-4)*8 TO 124 STEP 6
1720 SOUND 20000,1
1730 A$=INKEY$:IF A$=CHR$(27) THEN 1298 ELSE POKE 106,0:IF LEN(A$)>0 THEN LINE (CX,CY)-(CX+28,CY+44),0,BF:CX=252-CX:PUT (CX,CY),CAR%,PRESET:SOUND 200,1
1740 IF Y=>3 THEN PUT (DX,Y),DNK%,PSET
1750 IF CX=DX AND Y+25>=CY THEN 2060
1760 IF Y AND 3 THEN PUT (140,6),B%
1770 NEXT:LINE (DX,124)-(DX+32,149),0,BF:GOTO 1670
1780 CLS
1790 DRAW "S8C3"
1800 DRAW"BM12,1r3m+1,3d2R1ND2u1r2d4l2u1l1"
1810 DRAW"d7R1nd2u2r3d6l3u2l1d3m-1,1l3"
1820 DRAW"m-1,-1u3l1d2l3u6r3d2nd2r1u7l1d1l2"
1830 DRAW"u4r2d1nd2R1U2"
1840 DRAW"M+1,-3"
1850 DRAW"BD10D2R3U2M-1,-1L1M-1,1"
1860 DRAW"BD3D1R1U1L1BR2R1D1L1U1
1870 DRAW"BD2BL2D1R1U1L1BR2R1D1L1U1
1880 DRAW"BD2BL2D1R1U1L1BR2R1D1L1U1
1890 LINE(0,0)-(40,60),,B
1900 PAINT (1,1)
1910 DIM CAR%(900)
1920 GET(1,1)-(29,45),CAR%
1930 RETURN
1940 CLS
1950 DRAW"S08"
1960 DRAW "BM14,18"
1970 DRAW"M+2,-4R8M+1,-1U1M+1,+1M+2,-1
1980 DRAW"M-1,1M+1,3M-1,1M-1,-2M-1,2"
1990 DRAW"D3L1U3M-1,1D2L1U2L3D2L1U2M-1,-1"
2000 DRAW"D3L1U5M-2,3U1"
2010 PAINT (21,14),3
2020 PRESET (37,10):PRESET (40,10)
2030 PRESET (37,11):PRESET (40,11)
2040 GET (13,0)-(45,25),DNK%
2050 RETURN
2060 SD=SD+1:LOCATE 14,6:PRINT "BOOM!"
2070 GET (DX,Y)-(DX+16,Y+25),D1%
2080 D1X=DX:D1Y=Y:D2X=DX+17
2090 GET (DX+17,Y)-(DX+31,Y+25),D2%
2100 GET (CX,CY)-(CX+14,CY+44),C1%
2110 GET (CX+15,CY)-(CX+28,CY+44),C2%
2120 C1X=CX:C1Y=CY:C2X=CX+15
2130 FOR P=6 TO 0 STEP -1:Z=1/(2^P):Z1=1-Z
2140 PUT (C1X,C1Y),C1%:PUT(C2X,C1Y),C2%
2150 PUT (D1X,D1Y),D1%:PUT(D2X,D1Y),D2%
2160 C1X=CX*Z1:D1Y=Y*Z1:C2X=C2X+(291-C2X)*Z
2170 D1X=DX*Z1:C1Y=C1Y+(155-C1Y)*Z:D2X=D2X+(294-D2X)*Z
2180 PUT (C1X,C1Y),C1%:PUT(C2X,C1Y),C2%
2190 PUT (D1X,D1Y),D1%:PUT(D2X,D1Y),D2%
2200 SOUND 37+RND*200,4:NEXT
2210 FOR Y=1 TO 2000:NEXT
2220 CLS:GOTO 1540
2230 SM=SM+1:LOCATE 7,25:PRINT "Donkey loses!"
2240 FOR Y=1 TO 1000:NEXT
2250 CLS:GOTO 1540
==== SOURCE FILE ====
* ''[[https://github.com/spotlessmind1975/ugbasic/tree/main/examples/contrib_donkey.bas|contrib_donkey.bas]]''
==== HOW TO COMPILE AND RUN ====
The instructions here refer to compiling the example from the command line. For Microsoft Windows users we suggest using **[[https://spotlessmind1975.itch.io/ugbasic-ide|UGBASIC-IDE]]**, which allows you to compile the example with just one click.=== ATARI 400/800 family ===
In order to compile and run the example, you need to have the Altirra emulator, and in particular that the ''altirra'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.atari contrib_donkey.bas -o example.xex
altirra example.xex
# Windows
ugbc.atari.exe contrib_donkey.bas -o example.xex
altirra example.xex
=== ATARI 600XL/800XL/1200XL/XG(SE) family ===
In order to compile and run the example, you need to have the Altirra emulator, and in particular that the ''altirra'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.atarixl contrib_donkey.bas -o example.xex
altirra example.xex
# Windows
ugbc.atarixl.exe contrib_donkey.bas -o example.xex
altirra example.xex
=== Commodore 64 ===
In order to compile and run the example, you need to have the VICE emulator, and in particular that the ''x64sc'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.c64 contrib_donkey.bas -o example.prg
x64sc example.prg
# Windows
ugbc.c64.exe contrib_donkey.bas -o example.prg
x64sc example.prg
=== Commodore PLUS/4 ===
== Using YAPE ==
In order to run the example, you need to have the YAPE emulator. In particular that the ''yape'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.plus4 contrib_donkey.bas -o example.prg
yape example.prg
# Windows
ugbc.plus4.exe contrib_donkey.bas -o example.prg
yape example.prg
== Using VICE ==
In order to run the example, you need to have the VICE emulator. In particular that the ''xplus4'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.plus4 contrib_donkey.bas -o example.prg
xplus4 example.prg
# Windows
ugbc.plus4.exe contrib_donkey.bas -o example.prg
xplus4 example.prg
=== Dragon 32 ===
In order to compile and run the example, you need to have the XROAR emulator, and in particular that the ''xroar'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.d32 contrib_donkey.bas -o example.bin
xroar -rompath (your rom path) example.bin
# Windows
ugbc.d32.exe contrib_donkey.bas -o example.bin
xroar.exe -rompath (your rom path) example.bin
=== Dragon 64 ===
In order to compile and run the example, you need to have the XROAR emulator, and in particular that the ''xroar'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.d64 contrib_donkey.bas -o example.bin
xroar -rompath (your rom path) example.bin
# Windows
ugbc.d64.exe contrib_donkey.bas -o example.bin
xroar.exe -rompath (your rom path) example.bin
=== PC128 Olivetti Prodest ===
In order to compile and run the example, you need to have the DCMOTO emulator, and in particular that the ''dcmoto'' executable is accessible.
Then, type this command on the command line and on the emulator:
# Linux
ugbc.pc128op contrib_donkey.bas -o example.k7
dcmoto
(choose BASIC 128)
CLEAR,&H2FFF: LOADM"CASS:",R: EXEC
# Windows
ugbc.pc128op.exe contrib_donkey.bas -o example.k7
dcmoto
(choose example.k7)
(choose BASIC 128)
CLEAR,&H2FFF: LOADM"CASS:",R: EXEC
=== Thomson MO5 ===
In order to compile and run the example, you need to have the DCMOTO emulator, and in particular that the ''dcmoto'' executable is accessible.
Then, type this command on the command line and on the emulator:
# Linux
ugbc.pc128op contrib_donkey.bas -o example.k7
dcmoto
(choose BASIC 128)
CLEAR,&H2FFF: LOADM"CASS:",R: EXEC
# Windows
ugbc.pc128op.exe contrib_donkey.bas -o example.k7
dcmoto
(choose example.k7)
(choose BASIC 128)
CLEAR,&H2FFF: LOADM"CASS:",R: EXEC
=== Commodore VIC-20 ===
In order to compile and run the example, you need to have the VICE emulator, and in particular that the ''xvic'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.vic20 contrib_donkey.bas -o example.prg
xvic --memory 24k example.prg
# Windows
ugbc.vic20.exe contrib_donkey.bas -o example.prg
xvic --memory 24k example.prg
=== ZX Spectrum ===
In order to compile and run the example, you need to have the Speccy emulator, and in particular that the ''speccy'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.zx contrib_donkey.bas -o example.tap
Speccy example.tap
# Windows
ugbc.zx.exe contrib_donkey.bas -o example.tap
Speccy example.tap
=== MSX ===
In order to compile and run the example, you need to have the openMsx or the BlueMSX emulator, and in particular that its executable is accessible.
Then, type this command on the command line:
== openMSX ==
# Linux
ugbc.msx1 contrib_donkey.bas -o example.rom
openmsx -cart example.rom
# Windows
ugbc.msx1.exe contrib_donkey.bas -o example.rom
openmsx -cart example.rom
== blueMSX ==
# Linux
ugbc.msx1 contrib_donkey.bas -o example.rom
bluemsx example.rom
# Windows
ugbc.msx1.exe contrib_donkey.bas -o example.rom
bluemsx example.rom
=== ColecoVision ===
In order to compile and run the example, you need to have the openMsx or the BlueMSX emulator, and in particular that its executable is accessible.
Then, type this command on the command line:
== openMSX ==
# Linux
ugbc.coleco contrib_donkey.bas -o example.rom
openmsx -machine \"COL - ColecoVision\" -cart example.rom
# Windows
ugbc.coleco.exe contrib_donkey.bas -o example.rom
bluemsx -machine \"COL - ColecoVision\" example.rom
== blueMSX ==
# Linux
ugbc.coleco contrib_donkey.bas -o example.rom
bluemsx /machine \"COL - ColecoVision\" /rom1 example.rom
# Windows
ugbc.coleco.exe contrib_donkey.bas -o example.rom
bluemsx /machine \"COL - ColecoVision\" /rom1 example.rom
=== SEGA SC-3000 ===
In order to compile and run the example, you need to have the BlueMSX emulator, and in particular that its executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.sc3000 contrib_donkey.bas -o example.rom
bluemsx /machine \"SEGA - SC-3000\" /rom1 example.rom
# Windows
ugbc.sc3000.exe contrib_donkey.bas -o example.rom
bluemsx /machine \"SEGA - SC-3000\" /rom1 example.rom
=== SEGA SG-1000 ===
In order to compile and run the example, you need to have the BlueMSX emulator, and in particular that its executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.sg1000 contrib_donkey.bas -o example.rom
bluemsx /machine \"SEGA - SG-1000\" /rom1 example.rom
# Windows
ugbc.sg1000.exe contrib_donkey.bas -o example.rom
bluemsx /machine \"SEGA - SG-1000\" /rom1 example.rom
==== ANY PROBLEM? ====
If you have found a problem trying to run this example, if you think there is a bug or, more simply, you would like it to be improved, [[https://github.com/spotlessmind1975/ugbasic/issues/new?title=IMPROVE The IBM Personal Computer Donkey|open an issue]] for this example on GitHub. Thank you!===== POWERED BY =====
[[:ugbasic:user:examples|{{ :ugbasic:user:logo-ugbasic.png?nolink&600 |}}]]