VOGONS


Reply 13240 of 16739, by creepingnet

User metadata
Rank Member
Rank
Member

Decided to take a break from guitar pedal development to fix up and upgrade the NEC Versa 486 laptop a bit.

Tuned up Windows 95 and now it's running Diablo.....at full speed no less (must be the lack of audio processing needed). All my Virtual CD-Roms are getting a full workout. Need to put DOOM Anthology on there.

Bought a 16 MB RAM card and a Cisco WiFi card for it on flea bay. Can't wait for those to come in. I'll finally be able to shuffle files around, light web duty, and maybe gain a few frames with emulators.

Also did some "rejuvinating" to the original NiMH battery pack. Was able to get about 30 mins of life out of it for an evening before a stalactite short in cell #3 blew the cell in half revealing this thing may have 12 cells rather than six. It's still working and holding charge otherwise but I think I'll re-cell the poor thing before too long anyway, plus buy one or two more batteries from wee bay.

~The Creeping Network~
My Website - https://sites.google.com/site/thecreepingnetwork/home
My Youtube Channel - https://www.youtube.com/channel/UCc6sYw9FvwuKahBHE_06diA

Reply 13241 of 16739, by liqmat

User metadata
Rank l33t
Rank
l33t
henryVK wrote:
I got the military surplus "portable" (is it really portable if it doesn't even have a handle?) running that I scored off eBay t […]
Show full quote

I got the military surplus "portable" (is it really portable if it doesn't even have a handle?) running that I scored off eBay the other week. It takes 24V 3A through this weird three-pronged connector. Redditor ekriirke figured out the polarity on his machine and kindly answered my questions, so this is all thanks to him really!

Anyway, I got a regular 24V laptop adapter and replaced the barrel plug with molex pins and presto: the machine boots up.

So -- this being surplus, I had assumed the hard drive would have been removed.. or at least wiped...

-- nope --

I'm pleased to present the German Army's artillery field command interface from the mid-nineties, running on a 33SX with 8 Mb of RAM in what appears to be Win 3.11:

pBmWZc3.jpg?1

I'm going to do a thread on this system once I have a little bit of time. Suffice to say there is not too much to do in the software without it being connected to the weapons system it was designed to go with. Still, though, I think it's pretty cool!

How freakin cool. Could you do a wide shot of it with the screen on?

Reply 13242 of 16739, by appiah4

User metadata
Rank l33t++
Rank
l33t++

Installed a discrete PCI Video Card to my K6-2 system and as a result had to downgrade it from a Voodoo 2 SLI configuration to a Voodoo 2. RAM bandwidth nearly doubled and the system is a lot more responsive, and almost as fast with a single Voodoo 2 as it was with the SLI.

Retronautics: A digital gallery of my retro computers, hardware and projects.

Reply 13243 of 16739, by henryVK

User metadata
Rank Member
Rank
Member
liqmat wrote:

How freakin cool. Could you do a wide shot of it with the screen on?

I'll take a bunch of pictures next weekend when I can get some good light! I haven't looked at all the menus yet either.

Reply 13245 of 16739, by liqmat

User metadata
Rank l33t
Rank
l33t
henryVK wrote:
liqmat wrote:

How freakin cool. Could you do a wide shot of it with the screen on?

I'll take a bunch of pictures next weekend when I can get some good light! I haven't looked at all the menus yet either.

I had forgotten you had posted a while back with a link to imgur of a system running. They really have a neat look to them.

Reply 13246 of 16739, by appiah4

User metadata
Rank l33t++
Rank
l33t++
kolderman wrote:
appiah4 wrote:

and almost as fast with a single Voodoo 2 as it was with the SLI.

Try bumping up the resolution.

A single Voodoo 2 can't do more than 800x600 due to framebuffer memory limitations.

Retronautics: A digital gallery of my retro computers, hardware and projects.

Reply 13248 of 16739, by Peter Swinkels

User metadata
Rank Member
Rank
Member

My retro activity? I was bored and cobbled a rudimentary Tetris clone together in Qbasic/Quick Basic (should also work in Visual Basic for DOS):

DEFINT A-Z

DECLARE FUNCTION CanMove (Map$, XDirection, YDirection)
DECLARE FUNCTION GetRotatedShapeMap$ (Shape, Angle)
DECLARE FUNCTION GetShapeMap$ (Shape)
DECLARE SUB CheckGameState ()
DECLARE SUB CreateShape ()
DECLARE SUB DisplayStatus ()
DECLARE SUB DrawBlock (ColorO$, PitX, PitY)
DECLARE SUB DrawPit ()
DECLARE SUB DrawShape (EraseV)
DECLARE SUB DropShape ()
DECLARE SUB InitializeGame ()
DECLARE SUB Main ()
DECLARE SUB RemoveFullRows ()
DECLARE SUB SettleActiveShape ()

CONST BLOCKSCALE = 24
CONST BLOCKSIDE = 4
CONST PITHEIGHT = 16
CONST PITLEFT = 8
CONST PITTOP = 2
CONST PITWIDTH = 10

COMMON SHARED DropRate!, GameOver, Pit$, Score, Shape, ShapeAngle, ShapeMap$, ShapeX, ShapeY

InitializeGame
Main

FUNCTION CanMove (Map$, XDirection, YDirection)
FOR BlockY = 0 TO 3
FOR BlockX = 0 TO 3
IF NOT MID$(Map$, ((BLOCKSIDE * BlockY) + BlockX) + 1, 1) = "0" THEN
PitX = (ShapeX + BlockX) + XDirection
PitY = (ShapeY + BlockY) + YDirection
IF PitX >= 0 AND PitX < PITWIDTH AND PitY >= 0 AND PitY < PITHEIGHT THEN
IF NOT MID$(Pit$, (((PITWIDTH * PitY) + PitX) + 1), 1) = "0" THEN
CanMove = 0
EXIT FUNCTION
END IF
ELSEIF PitX < 0 OR PitX >= PITWIDTH OR PitY >= PITHEIGHT THEN
CanMove = 0
EXIT FUNCTION
END IF
END IF
NEXT BlockX
NEXT BlockY

CanMove = -1
END FUNCTION

SUB CheckGameState
GameOver = (ShapeY < 0)

DrawPit
DisplayStatus
END SUB

SUB CreateShape
DropRate! = 1
Show last 252 lines
Shape = INT(RND * 6)
ShapeAngle = INT(RND * 4)
ShapeMap$ = GetRotatedShapeMap$(Shape, ShapeAngle)
ShapeX = 0
ShapeY = -BLOCKSIDE

IF INT(RND * 2) = 0 THEN Direction = -1 ELSE Direction = 1

FOR Move = 0 TO INT(RND * PITWIDTH)
IF CanMove(ShapeMap$, Direction, 1) THEN
ShapeX = ShapeX + Direction
ELSE
EXIT FOR
END IF
NEXT Move
END SUB

SUB DisplayStatus
COLOR 4
LOCATE INT((PITTOP * BLOCKSCALE) / 16), INT((PITLEFT * BLOCKSCALE) / 8) + 1
IF GameOver THEN
PRINT "Game over - press Enter to play a new game."
ELSE
PRINT "Score:" + STR$(Score)
END IF
END SUB

SUB DrawBlock (ColorO$, PitX, PitY)
DrawX = PitX * BLOCKSCALE
DrawY = PitY * BLOCKSCALE

LINE (DrawX + (PITLEFT * BLOCKSCALE), DrawY + (PITTOP * BLOCKSCALE))-STEP(BLOCKSCALE, BLOCKSCALE), VAL("&H" + ColorO$), BF
LINE (DrawX + CINT(BLOCKSCALE / 10) + (PITLEFT * BLOCKSCALE), DrawY + CINT(BLOCKSCALE / 10) + (PITTOP * BLOCKSCALE))-STEP(BLOCKSCALE - CINT(BLOCKSCALE / 5), BLOCKSCALE - CINT(BLOCKSCALE / 5)), 0, B
END SUB

SUB DrawPit
LINE ((PITLEFT * BLOCKSCALE) - 1, (PITTOP * BLOCKSCALE) - 1)-STEP((PITWIDTH * BLOCKSCALE) + 2, (PITHEIGHT * BLOCKSCALE) + 2), 15, B
LINE ((PITLEFT * BLOCKSCALE) - 1, (PITTOP * BLOCKSCALE) - 1)-STEP(PITWIDTH * BLOCKSCALE + 2, 0), 0

FOR PitY = 0 TO PITHEIGHT - 1
FOR PitX = 0 TO PITWIDTH - 1
IF GameOver THEN
ColorO$ = "4"
ELSE
ColorO$ = MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1)
END IF

DrawBlock ColorO$, PitX, PitY
NEXT PitX
NEXT PitY
END SUB

SUB DrawShape (EraseV)
FOR BlockX = 0 TO 3
FOR BlockY = 0 TO 3
PitX = ShapeX + BlockX
PitY = ShapeY + BlockY
IF PitX >= 0 AND PitX < PITWIDTH AND PitY >= 0 AND PitY < PITHEIGHT THEN
IF EraseV THEN
ColorO$ = MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1)
ELSE
ColorO$ = MID$(ShapeMap$, ((BLOCKSIDE * BlockY) + BlockX) + 1, 1)
IF ColorO$ = "0" THEN ColorO$ = MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1)
END IF
DrawBlock ColorO$, PitX, PitY
END IF
NEXT BlockY
NEXT BlockX
END SUB

SUB DropShape
IF CanMove(ShapeMap$, 0, 1) THEN
DrawShape -1
IF DropRate! > 0 THEN SOUND 37, .3
ShapeY = ShapeY + 1
DrawShape 0
ELSE
SettleActiveShape
CheckGameState

IF NOT GameOver THEN
CreateShape
DrawShape 0
END IF
END IF
END SUB

FUNCTION GetRotatedShapeMap$ (Shape, Angle)
Map$ = GetShapeMap$(Shape)
NewBlockX = 0
NewBlockY = 0
RotatedMap$ = STRING$(16, "0")

IF Angle = 0 THEN
GetRotatedShapeMap = Map$
EXIT FUNCTION
ELSE
FOR BlockX = 0 TO 3
FOR BlockY = 0 TO 3
SELECT CASE Angle
CASE 1
NewBlockX = 3 - BlockY
NewBlockY = BlockX
CASE 2
NewBlockX = 3 - BlockX
NewBlockY = 3 - BlockY
CASE 3
NewBlockX = BlockY
NewBlockY = 3 - BlockX
END SELECT

MID$(RotatedMap$, ((BLOCKSIDE * NewBlockY) + NewBlockX) + 1, 1) = MID$(Map$, ((BLOCKSIDE * BlockY) + BlockX) + 1, 1)
NEXT BlockY
NEXT BlockX
END IF

GetRotatedShapeMap = RotatedMap$
END FUNCTION

FUNCTION GetShapeMap$ (Shape)
SELECT CASE Shape
CASE 0
Map$ = "0000333300000000"
CASE 1
Map$ = "0000111000100000"
CASE 2
Map$ = "0000666060000000"
CASE 3
Map$ = "00000EE00EE00000"
CASE 4
Map$ = "0000022022000000"
CASE 5
Map$ = "0000555005000000"
CASE 6
Map$ = "0000440004400000"
CASE ELSE
Map$ = ""
END SELECT

GetShapeMap$ = Map$
END FUNCTION

SUB InitializeGame
RANDOMIZE TIMER
PLAY "ML L64"

SCREEN 12
COLOR 9
LOCATE 1, 1
PRINT "QBBlocks v1.00 - by: Peter Swinkels, ***2019***"

CreateShape

GameOver = 0
Pit$ = STRING$(PITWIDTH * PITHEIGHT, "0")
Score = 0

DrawPit
DisplayStatus
END SUB

SUB Main
StartTime! = TIMER
DO
Key$ = ""
DO WHILE Key$ = ""
IF NOT GameOver THEN
IF TIMER >= StartTime! + DropRate! OR StartTime! > TIMER THEN
DropShape
StartTime! = TIMER
END IF
END IF
Key$ = INKEY$
LOOP
IF Key$ = CHR$(27) THEN
SCREEN 0
END
ELSEIF GameOver THEN
IF Key$ = CHR$(13) THEN InitializeGame
ELSE
SELECT CASE Key$
CASE "A", "a"
DrawShape -1
IF ShapeAngle = 3 THEN NewAngle = 0 ELSE NewAngle = ShapeAngle + 1
RotatedMap$ = GetRotatedShapeMap(Shape, NewAngle)
IF CanMove(RotatedMap$, 0, 0) THEN
ShapeAngle = NewAngle
ShapeMap$ = RotatedMap$
END IF
DrawShape 0
CASE CHR$(0) + "K"
DrawShape -1
IF CanMove(ShapeMap$, -1, 0) THEN ShapeX = ShapeX - 1
DrawShape 0
CASE CHR$(0) + "M"
DrawShape -1
IF CanMove(ShapeMap$, 1, 0) THEN ShapeX = ShapeX + 1
DrawShape 0
CASE " "
DropRate! = 0
END SELECT
END IF
LOOP
END SUB

SUB RemoveFullRows
Full = 0

FOR PitY = 0 TO PITHEIGHT - 1
Full = -1
FOR PitX = 0 TO PITWIDTH - 1
IF MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1) = "0" THEN
Full = 0
EXIT FOR
END IF
NEXT PitX
IF Full THEN
FOR RemovedRow = PitY TO 0 STEP -1
FOR RemovedColumn = 0 TO PITWIDTH - 1
IF RemovedRow = 0 THEN
ColorO$ = "0"
ELSE
ColorO$ = MID$(Pit$, ((PITWIDTH * (RemovedRow - 1)) + RemovedColumn) + 1, 1)
END IF

MID$(Pit$, ((PITWIDTH * RemovedRow) + RemovedColumn) + 1, 1) = ColorO$
NEXT RemovedColumn
NEXT RemovedRow

Score = Score + 1
END IF
NEXT PitY
END SUB

SUB SettleActiveShape
PLAY "N21"

FOR BlockY = 0 TO 3
FOR BlockX = 0 TO 3
PitX = ShapeX + BlockX
PitY = ShapeY + BlockY
IF PitX >= 0 AND PitX < PITWIDTH AND PitY >= 0 AND PitY < PITHEIGHT THEN
IF NOT MID$(ShapeMap$, ((BLOCKSIDE * BlockY) + BlockX) + 1, 1) = "0" THEN
MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1) = MID$(ShapeMap$, ((BLOCKSIDE * BlockY) + BlockX) + 1, 1)
END IF
END IF
NEXT BlockX
NEXT BlockY

RemoveFullRows
END SUB

It's hardly a complete game. Feel free to expand it or not.

Last edited by Peter Swinkels on 2019-10-26, 10:41. Edited 1 time in total.

Reply 13249 of 16739, by schmatzler

User metadata
Rank Member
Rank
Member

Got a trash IBM T23 with a very good screen that I transplanted into my now perfect T23.

Pretty challenging project - the IBM T23 uses a plastic type that gets very brittle with age and just crumbles away when stressed too much. I had to fix up the case with steel wire, epoxy, superglue and baking soda. It holds up for now.

I doubt it will last another 20 years, though...

Reply 13250 of 16739, by xjas

User metadata
Rank l33t
Rank
l33t
Peter Swinkels wrote:
My retro activity? I was bored and cobbled a rudimentary Tetris clone together in Qbasic/Quick Basic (should also work in Visual […]
Show full quote

My retro activity? I was bored and cobbled a rudimentary Tetris clone together in Qbasic/Quick Basic (should also work in Visual Basic for DOS):

DEFINT A-Z

DECLARE FUNCTION CanMove (Map$, XDirection, YDirection)
DECLARE FUNCTION GetRotatedShapeMap$ (Shape, Angle)
DECLARE FUNCTION GetShapeMap$ (Shape)
DECLARE SUB CheckGameState ()
DECLARE SUB CreateShape ()
DECLARE SUB DisplayStatus ()
DECLARE SUB DrawBlock (ColorO$, PitX, PitY)
DECLARE SUB DrawPit ()
DECLARE SUB DrawShape (EraseV)
DECLARE SUB DropShape ()
DECLARE SUB InitializeGame ()
DECLARE SUB Main ()
DECLARE SUB RemoveFullRows ()
DECLARE SUB SettleActiveShape ()

CONST BLOCKSCALE = 24
CONST BLOCKSIDE = 4
CONST PITHEIGHT = 16
CONST PITLEFT = 8
CONST PITTOP = 2
CONST PITWIDTH = 10

COMMON SHARED DropRate!, GameOver, Pit$, Score, Shape, ShapeAngle, ShapeMap$, ShapeX, ShapeY

InitializeGame
Main

FUNCTION CanMove (Map$, XDirection, YDirection)
FOR BlockY = 0 TO 3
FOR BlockX = 0 TO 3
IF NOT MID$(Map$, ((BLOCKSIDE * BlockY) + BlockX) + 1, 1) = "0" THEN
PitX = (ShapeX + BlockX) + XDirection
PitY = (ShapeY + BlockY) + YDirection
IF PitX >= 0 AND PitX < PITWIDTH AND PitY >= 0 AND PitY < PITHEIGHT THEN
IF NOT MID$(Pit$, (((PITWIDTH * PitY) + PitX) + 1), 1) = "0" THEN
CanMove = 0
EXIT FUNCTION
END IF
ELSEIF PitX < 0 OR PitX >= PITWIDTH OR PitY >= PITHEIGHT THEN
CanMove = 0
EXIT FUNCTION
END IF
END IF
NEXT BlockX
NEXT BlockY

CanMove = -1
END FUNCTION

SUB CheckGameState
GameOver = (ShapeY < 0)

DrawPit
DisplayStatus
END SUB

SUB CreateShape
DropRate! = 1
Show last 252 lines
Shape = INT(RND * 6)
ShapeAngle = INT(RND * 4)
ShapeMap$ = GetRotatedShapeMap$(Shape, ShapeAngle)
ShapeX = 0
ShapeY = -BLOCKSIDE

IF INT(RND * 2) = 0 THEN Direction = -1 ELSE Direction = 1

FOR Move = 0 TO INT(RND * PITWIDTH)
IF CanMove(ShapeMap$, Direction, 1) THEN
ShapeX = ShapeX + Direction
ELSE
EXIT FOR
END IF
NEXT Move
END SUB

SUB DisplayStatus
COLOR 4
LOCATE INT((PITTOP * BLOCKSCALE) / 16), INT((PITLEFT * BLOCKSCALE) / 8) + 1
IF GameOver THEN
PRINT "Game over - press Enter to play a new game."
ELSE
PRINT "Score:" + STR$(Score)
END IF
END SUB

SUB DrawBlock (ColorO$, PitX, PitY)
DrawX = PitX * BLOCKSCALE
DrawY = PitY * BLOCKSCALE

LINE (DrawX + (PITLEFT * BLOCKSCALE), DrawY + (PITTOP * BLOCKSCALE))-STEP(BLOCKSCALE, BLOCKSCALE), VAL("&H" + ColorO$), BF
LINE (DrawX + CINT(BLOCKSCALE / 10) + (PITLEFT * BLOCKSCALE), DrawY + CINT(BLOCKSCALE / 10) + (PITTOP * BLOCKSCALE))-STEP(BLOCKSCALE - CINT(BLOCKSCALE / 5), BLOCKSCALE - CINT(BLOCKSCALE / 5)), 0, B
END SUB

SUB DrawPit
LINE ((PITLEFT * BLOCKSCALE) - 1, (PITTOP * BLOCKSCALE) - 1)-STEP((PITWIDTH * BLOCKSCALE) + 2, (PITHEIGHT * BLOCKSCALE) + 2), 15, B
LINE ((PITLEFT * BLOCKSCALE) - 1, (PITTOP * BLOCKSCALE) - 1)-STEP(PITWIDTH * BLOCKSCALE + 2, 0), 0

FOR PitY = 0 TO PITHEIGHT - 1
FOR PitX = 0 TO PITWIDTH - 1
IF GameOver THEN
ColorO$ = "4"
ELSE
ColorO$ = MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1)
END IF

DrawBlock ColorO$, PitX, PitY
NEXT PitX
NEXT PitY
END SUB

SUB DrawShape (EraseV)
FOR BlockX = 0 TO 3
FOR BlockY = 0 TO 3
PitX = ShapeX + BlockX
PitY = ShapeY + BlockY
IF PitX >= 0 AND PitX < PITWIDTH AND PitY >= 0 AND PitY < PITHEIGHT THEN
IF EraseV THEN
ColorO$ = MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1)
ELSE
ColorO$ = MID$(ShapeMap$, ((BLOCKSIDE * BlockY) + BlockX) + 1, 1)
IF ColorO$ = "0" THEN ColorO$ = MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1)
END IF
DrawBlock ColorO$, PitX, PitY
END IF
NEXT BlockY
NEXT BlockX
END SUB

SUB DropShape
IF CanMove(ShapeMap$, 0, 1) THEN
DrawShape -1
IF DropRate! > 0 THEN SOUND 37, .3
ShapeY = ShapeY + 1
DrawShape 0
ELSE
SettleActiveShape
CheckGameState

IF NOT GameOver THEN
CreateShape
DrawShape 0
END IF
END IF
END SUB

FUNCTION GetRotatedShapeMap$ (Shape, Angle)
Map$ = GetShapeMap$(Shape)
NewBlockX = 0
NewBlockY = 0
RotatedMap$ = STRING$(16, "0")

IF Angle = 0 THEN
GetRotatedShapeMap = Map$
EXIT FUNCTION
ELSE
FOR BlockX = 0 TO 3
FOR BlockY = 0 TO 3
SELECT CASE Angle
CASE 1
NewBlockX = 3 - BlockY
NewBlockY = BlockX
CASE 2
NewBlockX = 3 - BlockX
NewBlockY = 3 - BlockY
CASE 3
NewBlockX = BlockY
NewBlockY = 3 - BlockX
END SELECT

MID$(RotatedMap$, ((BLOCKSIDE * NewBlockY) + NewBlockX) + 1, 1) = MID$(Map$, ((BLOCKSIDE * BlockY) + BlockX) + 1, 1)
NEXT BlockY
NEXT BlockX
END IF

GetRotatedShapeMap = RotatedMap$
END FUNCTION

FUNCTION GetShapeMap$ (Shape)
SELECT CASE Shape
CASE 0
Map$ = "0000333300000000"
CASE 1
Map$ = "0000111000100000"
CASE 2
Map$ = "0000666060000000"
CASE 3
Map$ = "00000EE00EE00000"
CASE 4
Map$ = "0000022022000000"
CASE 5
Map$ = "0000555005000000"
CASE 6
Map$ = "0000440004400000"
CASE ELSE
Map$ = ""
END SELECT

GetShapeMap$ = Map$
END FUNCTION

SUB InitializeGame
RANDOMIZE TIMER
PLAY "ML L64"

SCREEN 12
COLOR 9
LOCATE 1, 1
PRINT "QBBlocks v1.00 - by: Peter Swinkels, ***2019***"

CreateShape

GameOver = 0
Pit$ = STRING$(PITWIDTH * PITHEIGHT, "0")
Score = 0

DrawPit
DisplayStatus
END SUB

SUB Main
StartTime! = TIMER
DO
Key$ = ""
DO WHILE Key$ = ""
IF NOT GameOver THEN
IF TIMER >= StartTime! + DropRate! OR StartTime! > TIMER THEN
DropShape
StartTime! = TIMER
END IF
END IF
Key$ = INKEY$
LOOP
IF Key$ = CHR$(27) THEN
SCREEN 0
END
ELSEIF GameOver THEN
IF Key$ = CHR$(13) THEN InitializeGame
ELSE
SELECT CASE Key$
CASE "A", "a"
DrawShape -1
IF ShapeAngle = 3 THEN NewAngle = 0 ELSE NewAngle = ShapeAngle + 1
RotatedMap$ = GetRotatedShapeMap(Shape, NewAngle)
IF CanMove(RotatedMap$, 0, 0) THEN
ShapeAngle = NewAngle
ShapeMap$ = RotatedMap$
END IF
DrawShape 0
CASE CHR$(0) + "K"
DrawShape -1
IF CanMove(ShapeMap$, -1, 0) THEN ShapeX = ShapeX - 1
DrawShape 0
CASE CHR$(0) + "M"
DrawShape -1
IF CanMove(ShapeMap$, 1, 0) THEN ShapeX = ShapeX + 1
DrawShape 0
CASE " "
DropRate! = 0
END SELECT
END IF
LOOP
END SUB

SUB RemoveFullRows
Full = 0

FOR PitY = 0 TO PITHEIGHT - 1
Full = -1
FOR PitX = 0 TO PITWIDTH - 1
IF MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1) = "0" THEN
Full = 0
EXIT FOR
END IF
NEXT PitX
IF Full THEN
FOR RemovedRow = PitY TO 0 STEP -1
FOR RemovedColumn = 0 TO PITWIDTH - 1
IF RemovedRow = 0 THEN
ColorO$ = "0"
ELSE
ColorO$ = MID$(Pit$, ((PITWIDTH * (RemovedRow - 1)) + RemovedColumn) + 1, 1)
END IF

MID$(Pit$, ((PITWIDTH * RemovedRow) + RemovedColumn) + 1, 1) = ColorO$
NEXT RemovedColumn
NEXT RemovedRow

Score = Score + 1
END IF
NEXT PitY
END SUB

SUB SettleActiveShape
PLAY "N21"

FOR BlockY = 0 TO 3
FOR BlockX = 0 TO 3
PitX = ShapeX + BlockX
PitY = ShapeY + BlockY
IF PitX >= 0 AND PitX < PITWIDTH AND PitY >= 0 AND PitY < PITHEIGHT THEN
IF NOT MID$(ShapeMap$, ((BLOCKSIDE * BlockY) + BlockX) + 1, 1) = "0" THEN
MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1) = MID$(ShapeMap$, ((BLOCKSIDE * BlockY) + BlockX) + 1, 1)
END IF
END IF
NEXT BlockX
NEXT BlockY

RemoveFullRows
END SUB

It's hardly a complete game. Feel free expand it or not.

Nice! I highly approve of Qbasic game making. Will check it out when I'm back at my 'dev' machine. 😀

twitch.tv/oldskooljay - playing the obscure, forgotten & weird - most Tuesdays & Thursdays @ 6:30 PM PDT. Bonus streams elsewhen!

Reply 13251 of 16739, by looking4awayout

User metadata
Rank Member
Rank
Member

I have made an offer for an SL6BY 1.4GHz Tualatin-S. I've heard that batch is much more overclocking friendly than the previous one, the SL5XL I currently own. If the seller accepts, it will make a nice pair with the three 512MB Kingston PC133 modules, two using Mosel Vitelic chips and the third one with Hynix chips, that should let me theoretically overclock my system further, and the 128GB LiteOn SSD that will turn my RDD into an all-SSD system.

Fingers crossed, as this seller is known to be kind of a jerk sometimes.

My Retro Daily Driver: Pentium !!!-S 1.7GHz | 2GB PC166 ECC SDRAM | Gecube Radeon X1950 Pro 256MB OC | 128GB Lite-On SSD + 500GB WD Blue SSD | Creative Sound Blaster Live! CT4620 | Windows XP Professional SP3

Reply 13252 of 16739, by FAMICOMASTER

User metadata
Rank Member
Rank
Member
looking4awayout wrote:

I have made an offer for an SL6BY 1.4GHz Tualatin-S. I've heard that batch is much more overclocking friendly than the previous one, the SL5XL I currently own. If the seller accepts, it will make a nice pair with the three 512MB Kingston PC133 modules, two using Mosel Vitelic chips and the third one with Hynix chips, that should let me theoretically overclock my system further, and the 128GB LiteOn SSD that will turn my RDD into an all-SSD system.

Fingers crossed, as this seller is known to be kind of a jerk sometimes.

3x 512MB modules? Is that stable in general, or under 9x? I've always heard 9x was unstable with more than 1GB, and I also always heard that the third DIMM slot was typically not very reliable either. What chipset is this?

Reply 13253 of 16739, by Thermalwrong

User metadata
Rank Member
Rank
Member
schmatzler wrote:

Got a trash IBM T23 with a very good screen that I transplanted into my now perfect T23.

Pretty challenging project - the IBM T23 uses a plastic type that gets very brittle with age and just crumbles away when stressed too much. I had to fix up the case with steel wire, epoxy, superglue and baking soda. It holds up for now.

I doubt it will last another 20 years, though...

The T20-T23 models were all pretty fragile even when they were new. That bit around the DVD drive is the most prone to breaking if I recall correctly.

You could try designing up replacement parts to 3d print 😁

This evening, I've been playing with some scrap laptops - one got a replacement screen. The Dell XPi CD P150ST needs some rust cleaned and a replacement floppy drive (it has a wavetable built in!) and each has had some battery corrosion prevention 😀

Reply 13254 of 16739, by FAMICOMASTER

User metadata
Rank Member
Rank
Member

I disassembled and cleaned my Model M after a few keys stopped working.

Those keys still do not work at all. "3" "E" "D" and "C". I thought it might be an electrical problem, but looking at it, "F1" is on the same line... But "F1" works, since it can bypass the memory size error on my AT. Very strange. I'm having a model F shipped to me from my storage, along with a Suntouch Jr. I also bid on an XT version of the model F for my XT machine.

Speaking of my XT machine, I continued to experiment with it's little switchbank and figured out some CGA modes with my nice new color monitor. I now have a dual monitor XT! Kind of. I don't have any software that can run on both screens at once. It's nice to see that white flashing cursor on the left, though.

Does Windows 3.0 support MDA and CGA? It might be cool to be able to switch between screens at will under 3.0. Maybe GEM instead. Something has to have dual monitor support for this natively.

MVIMG_20191022_220857.jpg
And in the dark, because P31 looks coolest in the dark
MVIMG_20191022_220921.jpg

Reply 13255 of 16739, by Bruninho

User metadata
Rank Oldbie
Rank
Oldbie
Peter Swinkels wrote:
My retro activity? I was bored and cobbled a rudimentary Tetris clone together in Qbasic/Quick Basic (should also work in Visual […]
Show full quote

My retro activity? I was bored and cobbled a rudimentary Tetris clone together in Qbasic/Quick Basic (should also work in Visual Basic for DOS):

DEFINT A-Z

DECLARE FUNCTION CanMove (Map$, XDirection, YDirection)
DECLARE FUNCTION GetRotatedShapeMap$ (Shape, Angle)
DECLARE FUNCTION GetShapeMap$ (Shape)
DECLARE SUB CheckGameState ()
DECLARE SUB CreateShape ()
DECLARE SUB DisplayStatus ()
DECLARE SUB DrawBlock (ColorO$, PitX, PitY)
DECLARE SUB DrawPit ()
DECLARE SUB DrawShape (EraseV)
DECLARE SUB DropShape ()
DECLARE SUB InitializeGame ()
DECLARE SUB Main ()
DECLARE SUB RemoveFullRows ()
DECLARE SUB SettleActiveShape ()

CONST BLOCKSCALE = 24
CONST BLOCKSIDE = 4
CONST PITHEIGHT = 16
CONST PITLEFT = 8
CONST PITTOP = 2
CONST PITWIDTH = 10

COMMON SHARED DropRate!, GameOver, Pit$, Score, Shape, ShapeAngle, ShapeMap$, ShapeX, ShapeY

InitializeGame
Main

FUNCTION CanMove (Map$, XDirection, YDirection)
FOR BlockY = 0 TO 3
FOR BlockX = 0 TO 3
IF NOT MID$(Map$, ((BLOCKSIDE * BlockY) + BlockX) + 1, 1) = "0" THEN
PitX = (ShapeX + BlockX) + XDirection
PitY = (ShapeY + BlockY) + YDirection
IF PitX >= 0 AND PitX < PITWIDTH AND PitY >= 0 AND PitY < PITHEIGHT THEN
IF NOT MID$(Pit$, (((PITWIDTH * PitY) + PitX) + 1), 1) = "0" THEN
CanMove = 0
EXIT FUNCTION
END IF
ELSEIF PitX < 0 OR PitX >= PITWIDTH OR PitY >= PITHEIGHT THEN
CanMove = 0
EXIT FUNCTION
END IF
END IF
NEXT BlockX
NEXT BlockY

CanMove = -1
END FUNCTION

SUB CheckGameState
GameOver = (ShapeY < 0)

DrawPit
DisplayStatus
END SUB

SUB CreateShape
DropRate! = 1
Show last 252 lines
Shape = INT(RND * 6)
ShapeAngle = INT(RND * 4)
ShapeMap$ = GetRotatedShapeMap$(Shape, ShapeAngle)
ShapeX = 0
ShapeY = -BLOCKSIDE

IF INT(RND * 2) = 0 THEN Direction = -1 ELSE Direction = 1

FOR Move = 0 TO INT(RND * PITWIDTH)
IF CanMove(ShapeMap$, Direction, 1) THEN
ShapeX = ShapeX + Direction
ELSE
EXIT FOR
END IF
NEXT Move
END SUB

SUB DisplayStatus
COLOR 4
LOCATE INT((PITTOP * BLOCKSCALE) / 16), INT((PITLEFT * BLOCKSCALE) / 8) + 1
IF GameOver THEN
PRINT "Game over - press Enter to play a new game."
ELSE
PRINT "Score:" + STR$(Score)
END IF
END SUB

SUB DrawBlock (ColorO$, PitX, PitY)
DrawX = PitX * BLOCKSCALE
DrawY = PitY * BLOCKSCALE

LINE (DrawX + (PITLEFT * BLOCKSCALE), DrawY + (PITTOP * BLOCKSCALE))-STEP(BLOCKSCALE, BLOCKSCALE), VAL("&H" + ColorO$), BF
LINE (DrawX + CINT(BLOCKSCALE / 10) + (PITLEFT * BLOCKSCALE), DrawY + CINT(BLOCKSCALE / 10) + (PITTOP * BLOCKSCALE))-STEP(BLOCKSCALE - CINT(BLOCKSCALE / 5), BLOCKSCALE - CINT(BLOCKSCALE / 5)), 0, B
END SUB

SUB DrawPit
LINE ((PITLEFT * BLOCKSCALE) - 1, (PITTOP * BLOCKSCALE) - 1)-STEP((PITWIDTH * BLOCKSCALE) + 2, (PITHEIGHT * BLOCKSCALE) + 2), 15, B
LINE ((PITLEFT * BLOCKSCALE) - 1, (PITTOP * BLOCKSCALE) - 1)-STEP(PITWIDTH * BLOCKSCALE + 2, 0), 0

FOR PitY = 0 TO PITHEIGHT - 1
FOR PitX = 0 TO PITWIDTH - 1
IF GameOver THEN
ColorO$ = "4"
ELSE
ColorO$ = MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1)
END IF

DrawBlock ColorO$, PitX, PitY
NEXT PitX
NEXT PitY
END SUB

SUB DrawShape (EraseV)
FOR BlockX = 0 TO 3
FOR BlockY = 0 TO 3
PitX = ShapeX + BlockX
PitY = ShapeY + BlockY
IF PitX >= 0 AND PitX < PITWIDTH AND PitY >= 0 AND PitY < PITHEIGHT THEN
IF EraseV THEN
ColorO$ = MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1)
ELSE
ColorO$ = MID$(ShapeMap$, ((BLOCKSIDE * BlockY) + BlockX) + 1, 1)
IF ColorO$ = "0" THEN ColorO$ = MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1)
END IF
DrawBlock ColorO$, PitX, PitY
END IF
NEXT BlockY
NEXT BlockX
END SUB

SUB DropShape
IF CanMove(ShapeMap$, 0, 1) THEN
DrawShape -1
IF DropRate! > 0 THEN SOUND 37, .3
ShapeY = ShapeY + 1
DrawShape 0
ELSE
SettleActiveShape
CheckGameState

IF NOT GameOver THEN
CreateShape
DrawShape 0
END IF
END IF
END SUB

FUNCTION GetRotatedShapeMap$ (Shape, Angle)
Map$ = GetShapeMap$(Shape)
NewBlockX = 0
NewBlockY = 0
RotatedMap$ = STRING$(16, "0")

IF Angle = 0 THEN
GetRotatedShapeMap = Map$
EXIT FUNCTION
ELSE
FOR BlockX = 0 TO 3
FOR BlockY = 0 TO 3
SELECT CASE Angle
CASE 1
NewBlockX = 3 - BlockY
NewBlockY = BlockX
CASE 2
NewBlockX = 3 - BlockX
NewBlockY = 3 - BlockY
CASE 3
NewBlockX = BlockY
NewBlockY = 3 - BlockX
END SELECT

MID$(RotatedMap$, ((BLOCKSIDE * NewBlockY) + NewBlockX) + 1, 1) = MID$(Map$, ((BLOCKSIDE * BlockY) + BlockX) + 1, 1)
NEXT BlockY
NEXT BlockX
END IF

GetRotatedShapeMap = RotatedMap$
END FUNCTION

FUNCTION GetShapeMap$ (Shape)
SELECT CASE Shape
CASE 0
Map$ = "0000333300000000"
CASE 1
Map$ = "0000111000100000"
CASE 2
Map$ = "0000666060000000"
CASE 3
Map$ = "00000EE00EE00000"
CASE 4
Map$ = "0000022022000000"
CASE 5
Map$ = "0000555005000000"
CASE 6
Map$ = "0000440004400000"
CASE ELSE
Map$ = ""
END SELECT

GetShapeMap$ = Map$
END FUNCTION

SUB InitializeGame
RANDOMIZE TIMER
PLAY "ML L64"

SCREEN 12
COLOR 9
LOCATE 1, 1
PRINT "QBBlocks v1.00 - by: Peter Swinkels, ***2019***"

CreateShape

GameOver = 0
Pit$ = STRING$(PITWIDTH * PITHEIGHT, "0")
Score = 0

DrawPit
DisplayStatus
END SUB

SUB Main
StartTime! = TIMER
DO
Key$ = ""
DO WHILE Key$ = ""
IF NOT GameOver THEN
IF TIMER >= StartTime! + DropRate! OR StartTime! > TIMER THEN
DropShape
StartTime! = TIMER
END IF
END IF
Key$ = INKEY$
LOOP
IF Key$ = CHR$(27) THEN
SCREEN 0
END
ELSEIF GameOver THEN
IF Key$ = CHR$(13) THEN InitializeGame
ELSE
SELECT CASE Key$
CASE "A", "a"
DrawShape -1
IF ShapeAngle = 3 THEN NewAngle = 0 ELSE NewAngle = ShapeAngle + 1
RotatedMap$ = GetRotatedShapeMap(Shape, NewAngle)
IF CanMove(RotatedMap$, 0, 0) THEN
ShapeAngle = NewAngle
ShapeMap$ = RotatedMap$
END IF
DrawShape 0
CASE CHR$(0) + "K"
DrawShape -1
IF CanMove(ShapeMap$, -1, 0) THEN ShapeX = ShapeX - 1
DrawShape 0
CASE CHR$(0) + "M"
DrawShape -1
IF CanMove(ShapeMap$, 1, 0) THEN ShapeX = ShapeX + 1
DrawShape 0
CASE " "
DropRate! = 0
END SELECT
END IF
LOOP
END SUB

SUB RemoveFullRows
Full = 0

FOR PitY = 0 TO PITHEIGHT - 1
Full = -1
FOR PitX = 0 TO PITWIDTH - 1
IF MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1) = "0" THEN
Full = 0
EXIT FOR
END IF
NEXT PitX
IF Full THEN
FOR RemovedRow = PitY TO 0 STEP -1
FOR RemovedColumn = 0 TO PITWIDTH - 1
IF RemovedRow = 0 THEN
ColorO$ = "0"
ELSE
ColorO$ = MID$(Pit$, ((PITWIDTH * (RemovedRow - 1)) + RemovedColumn) + 1, 1)
END IF

MID$(Pit$, ((PITWIDTH * RemovedRow) + RemovedColumn) + 1, 1) = ColorO$
NEXT RemovedColumn
NEXT RemovedRow

Score = Score + 1
END IF
NEXT PitY
END SUB

SUB SettleActiveShape
PLAY "N21"

FOR BlockY = 0 TO 3
FOR BlockX = 0 TO 3
PitX = ShapeX + BlockX
PitY = ShapeY + BlockY
IF PitX >= 0 AND PitX < PITWIDTH AND PitY >= 0 AND PitY < PITHEIGHT THEN
IF NOT MID$(ShapeMap$, ((BLOCKSIDE * BlockY) + BlockX) + 1, 1) = "0" THEN
MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1) = MID$(ShapeMap$, ((BLOCKSIDE * BlockY) + BlockX) + 1, 1)
END IF
END IF
NEXT BlockX
NEXT BlockY

RemoveFullRows
END SUB

It's hardly a complete game. Feel free expand it or not.

THUMBS UP for that! I will also check it out later when I can.

"Design isn't just what it looks like and feels like. Design is how it works."
JOBS, Steve.

Reply 13256 of 16739, by Caluser2000

User metadata
Rank Oldbie
Rank
Oldbie
FAMICOMASTER wrote:

I disassembled and cleaned my Model M after a few keys stopped working.

Does Windows 3.0 support MDA and CGA? It might be cool to be able to switch between screens at will under 3.0. Maybe GEM instead. Something has to have dual monitor support for this natively.

Bummer about the keyboard.

Unless there is some program that will do it I'd image it'll be a no go. same goes for GeoWorks. The video out put is determined by a driver entry in the system ini file iirc. Who knows though, there may be a work around.

There's a glitch in the matrix.

Reply 13257 of 16739, by FAMICOMASTER

User metadata
Rank Member
Rank
Member

GEM, not GeoWorks, but I'd assume it doesn't matter that much.

Would be cool to have some software that uses both.

At least I can play Hercules and CGA games.

Reply 13259 of 16739, by looking4awayout

User metadata
Rank Member
Rank
Member
FAMICOMASTER wrote:

3x 512MB modules? Is that stable in general, or under 9x? I've always heard 9x was unstable with more than 1GB, and I also always heard that the third DIMM slot was typically not very reliable either. What chipset is this?

It is very stable, but I don't use Windows 98. I use Windows XP. My chipset is the VIA Apollo Pro 133T. I don't touch 9x not even with a barge pole.

My Retro Daily Driver: Pentium !!!-S 1.7GHz | 2GB PC166 ECC SDRAM | Gecube Radeon X1950 Pro 256MB OC | 128GB Lite-On SSD + 500GB WD Blue SSD | Creative Sound Blaster Live! CT4620 | Windows XP Professional SP3