MSX1driver Torso (MSX) by Kaido Kotoni
A downloadable project
I used DeepL and Google Translate.
The creator is Japanese, and we would appreciate your understanding.
----- MSX1driver Torso -----
-- Overview
(A man)
I recently found a great YouTuber. I have watched all of his videos!
But it's not enough. I want to watch more and more of his videos...
I had no choice but to create this program.
(Doctor)
...Did you watch all of those videos?
Hmmm, okay. Let's change your medicine.
"Webdriver Torso"
https://www.youtube.com/@realwebdrivertorso
is coming to MSX1!
You can recreate that excitement with your MSX1 at any time!
Is 10 seconds not enough? You can play it as long as you want!
Bravo!
It works with any country system and memory capacity.
Of course, it also works on MSX2 and higher systems.
However, since it is created based on the NTSC system, the colors will look different in the PAL system.
Also, the default palette is different between TMS9918 (NTSC/MSX) and V9938 (MSX2), so the colors are different.
This is a limitation of the video chip.
-- Entry Sheet
Entry to
"12th Edition of BASIC 10 Liner Contest"
- Category
SCHAU
(DEMO)
- System requirement
All national MSX systems.
- Files
Torso1.dsk
Disk images that can be used with openMSX / blueMSX / webMSX.
Torso1.cas
Tape images that can be used with openMSX / blueMSX / webMSX.
Torso1.bas
A program file in ASCII format.
ReadMe_T1-jp.txt
ReadMe in Japanese.
ReadMe_T1-en.txt
Translation into English was done using DeepL and Google Translate.
ScreenShot_T1.gif
Screen capture image.
-- Source code
100 CLEAR:DEFINT A-Z:SCREEN 1:WIDTH 32:COLOR 1,15,15:KEY OFF:CLS 110 R=RND(-TIME):I=0:P=0:X1=0:X2=0:Y1=0:Y2=0:C=0:SN=0:B$=SPACE$(32) 120 FOR I=0 TO 15:VPOKE 1976+I,255:NEXT I:VPOKE &H201E,&H40:VPOKE &H201F,&H80:SOUND 1,0:TIME=99 130 P=ABS(P-1):POKE &HF923,&H18+P*4:CLS:C=247:GOSUB 190:C=248:GOSUB 190 140 LOCATE 0,23:PRINT "aqua.flv - slide ";RIGHT$("000"+MID$(STR$(SN),2),4); 150 SN=SN+1:IF SN=10000 THEN SN=0 160 IF TIME<60 THEN 160 170 TIME=0:VDP(2)=6+P:SOUND 0,RND(1)*128+64:SOUND 8,15 180 IF INKEY$="" THEN 130 ELSE SOUND 8,0:COLOR 15,0,0:SCREEN 0:END 190 X2=RND(1)*32:X1=RND(1)*X2:Y2=RND(1)*23:Y1=RND(1)*Y2:B$=STRING$(X2-X1+1,C):FOR I=Y1 TO Y2:LOCATE X1,I:PRINT B$;:NEXT I:RETURN
-- Description
Normally, a BASIC program alone cannot instantly rewrite the entire screen.
This program uses a little screen rewriting technique.
By using this technique, double buffering is achieved in BASIC only.
It explains the points for MSX BASIC beginners.
This is a common sense technique for intermediate and above, but may be helpful for those who are just starting out.
- Variable
R For random value initialization.
I Generic Loop Index.
P Screen page.
X1,Y1 Top left coordinate of the box.
X2,Y2 Lower right coordinate of the box.
C Character code.
SN Slide number.
B$ Box display work.
- Line 100 initialization
CLEAR:
Memory initialization.
In the case of this program, there is no need to specify the variable area, so there is no need to write it in a strong manner.
DEFINT A-Z:
All numeric variables shall be of type integer.
DEFINT is also a CLEAR. In other words, there is no need to write the preceding CLEAR.
However, this cannot be written in reverse. Reversing it will also clear the DEFINT declaration.
SCREEN 1:WIDTH 32:COLOR 1,15,15:KEY OFF:CLS
Screen initialization.
- Line 110 Variable declarations
R=RND(-TIME):I=0:P=0:X1=0:X2=0:Y1=0:Y2=0:C=0:SN=0:B$=SPACE$(32)
Initialize all variables to be used.
Allocate the maximum required size for string variables "after numeric variables".
Numeric variables are fixed in size, so rewriting their contents does not cause garbage collection.
Since string variables have variable contents, garbage collection will occur if they run out of size while in use.
String variables can reduce the occurrence of garbage collection by allocating the required size at the end.
- Line 120 Character Pattern Setting / Sound Setting
FOR I=0 TO 15:VPOKE 1976+I,255:NEXT I:
Rewrite character codes &HF7 and &HF8 into the box.
Why &HF7 and &HF8?
1. Since the character codes are sequential numbers, both can be rewritten in a single FOR loop.
2. SCREEN 1 can only change the color every 8 characters. Therefore, only &Hn7 and &Hn8 can set different colors.
VPOKE &H201E,&H40:
Set character codes &HF0-&HF7 to blue.
VPOKE &H201F,&H80:
Set character codes &HF8-&HFF to red.
SOUND 1,0:
Set the initial value of PSG.
TIME=99
Set the initial wait time. Set a value of 60 or more for the first drawing to be displayed immediately.
- Line 130 Draw Page setting / Box drawing
P=ABS(P-1):
Subtract 1 from P and put its absolute value in P.
You mean?
The value of P is 0,1,0,1,0,(repeat...).
POKE &HF923,&H18+P*4:CLS:
Set and clear the page to be rewritten.
The &HF923 contains the VRAM address referenced by the BASIC interpreter.
The BASIC interpreter uses this value to determine the VRAM address for PRINT and CLS.
This value is not changed by setting the value of BASE(5) and must be rewritten directly.
C=247:GOSUB 190:C=248:GOSUB 190
Draw a blue (C=247,&HF7) and a red (C=248,&HF8) box.
- Line 140 Footer Drawing
LOCATE 0,23:PRINT "aqua.flv - slide ";RIGHT$("000"+MID$(STR$(SN),2),4);
Draw the footer.
Since it is the bottom line, the screen will scroll to a new line unless ";" is added.
- Line 150 Slide number calculation
SN=SN+1:IF SN=10000 THEN SN=0
Slide numbering is up to 9999.
Oh, you want more digits? Do you want me to increase your medicine?
- Line 160 Waiting Process
IF TIME<60 THEN 160
Wait for 60 VBlank time (approx. 1 sec. / NTSC).
It is BASIC, so it is not entirely accurate, but it will not be too fast, even with a clocked-up machine or turboR.
- Line 170 Display Page Setting / Sound Setting
TIME=0:
Initialize wait time.
VDP(2)=6+P:
Switches the display page.
Why not rewrite BASE(5)?
For BASE, "BASE(5)=&H1800+P*&H400".
Clearly, "VDP(2)=6+P" is shorter and faster.
And BASE should be set back to its original value on exit.
SOUND 0,RND(1)*128+64:SOUND 8,15
Set a great sound.
- Line 180 Loop / End processing
IF INKEY$="" THEN 130 ELSE SOUND 8,0:COLOR 15,0,0:SCREEN 0:END
If there is no keyboard input, it loops.
If any keystrokes are made, the sound is stopped, the screen is restored, and the program exits.
The contents of &HF923 are re-set based on the BASE value when the SCREEN instruction is executed, so you do not have to do anything.
- Line 190 Box drawing subroutine
X2=RND(1)*32:X1=RND(1)*X2:Y2=RND(1)*23:Y1=RND(1)*Y2:B$=STRING$(X2-X1+1,C):
Determine the size of the box and create a string for drawing.
FOR I=Y1 TO Y2:LOCATE X1,I:PRINT B$;:NEXT I:
Draws a box.
Adding ";" speeds up the process just a little bit because line feed processing is not performed.
RETURN
Return from subroutine.
-- About me
This application was created by Kaido Kotoni.
Home page
YouTube
https://www.youtube.com/channel/UC5egj_wXPhi8UQgg8xNPNKw
Nico Nico Douga
Status | Released |
Category | Other |
Author | BASIC 10Liner |
Tags | 8-Bit, basic, basic10liner, MSX |
Download
Install instructions
-- Startup
- Disk <Torso1.dsk>
LOAD "TORSO1.BAS"
RUN
- Tape <Torso1.cas>
CLOAD
RUN
Both have the same content.
Operation has been confirmed with openMSX / blueMSX / webMSX.
Leave a comment
Log in with itch.io to leave a comment.