VOGONS


Reply 13240 of 27170, 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 13242 of 27170, 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 13243 of 27170, 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 13244 of 27170, by Deksor

User metadata
Rank l33t
Rank
l33t

Metabyte managed to reach 1024*600 with a single voodoo 2 with their wicked 3d drivers ^^

Trying to identify old hardware ? Visit The retro web - Project's thread The Retro Web project - a stason.org/TH99 alternative

Reply 13245 of 27170, by Peter Swinkels

User metadata
Rank Oldbie
Rank
Oldbie

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.

Do not read if you don't like attention seeking self-advertisements!

Did you read it anyway? Well, you can find all sorts of stuff I made using various programming languages over here:
https://github.com/peterswinkels

Reply 13246 of 27170, by schmatzler

User metadata
Rank Oldbie
Rank
Oldbie

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...

"Windows 98's natural state is locked up"

Reply 13247 of 27170, 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 13248 of 27170, 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 | 3GB PC166 ECC SDRAM | Geforce 6800 Ultra 256MB | 128GB Lite-On SSD + 500GB WD Blue SSD | ESS Allegro PCI | Windows XP Professional SP3

Reply 13249 of 27170, 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 13250 of 27170, by Thermalwrong

User metadata
Rank Oldbie
Rank
Oldbie
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 13251 of 27170, 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 13252 of 27170, 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.
READ: Right to Repair sucks and is illegal!

Reply 13253 of 27170, by Caluser2000

User metadata
Rank l33t
Rank
l33t
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.
A founding member of the 286 appreciation society.
Apparently 32-bit is dead and nobody likes P4s.
Of course, as always, I'm open to correction...😉

Reply 13254 of 27170, 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 13255 of 27170, by Caluser2000

User metadata
Rank l33t
Rank
l33t

GeoWorks
Runs fine on a XT class system.
Runs in Herculies Mode.
Runs in CGA Mode
Dos programs will run fine when using it

There's a glitch in the matrix.
A founding member of the 286 appreciation society.
Apparently 32-bit is dead and nobody likes P4s.
Of course, as always, I'm open to correction...😉

Reply 13256 of 27170, 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 | 3GB PC166 ECC SDRAM | Geforce 6800 Ultra 256MB | 128GB Lite-On SSD + 500GB WD Blue SSD | ESS Allegro PCI | Windows XP Professional SP3

Reply 13257 of 27170, by kolderman

User metadata
Rank l33t
Rank
l33t
looking4awayout wrote:
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.

Ur missing out man. Win98se rocks.

Reply 13258 of 27170, by looking4awayout

User metadata
Rank Member
Rank
Member

I used it, and I don't miss it. Plus it is not good for using the computer for daily tasks... XP is much better for web browsing and other general home activities.

My Retro Daily Driver: Pentium !!!-S 1.7GHz | 3GB PC166 ECC SDRAM | Geforce 6800 Ultra 256MB | 128GB Lite-On SSD + 500GB WD Blue SSD | ESS Allegro PCI | Windows XP Professional SP3

Reply 13259 of 27170, by bjwil1991

User metadata
Rank l33t
Rank
l33t

Removed the clock cap on an Original Xbox 1.0 revision motherboard, which did not leak and I desoldered the cap as it is better to do a desolder than it is to twist the cap off, which can cause the cap to spew its guts out. I also fixed up the Duke controller as the wiring was exposed and only worked at a certain angle of the wiring. I shortened the wires and wrapped them around one by one using electrical tape. Both the system and the controller work without any major issues, and I also cleaned out the Original Xbox (man, was it dusty). I will do a soft mod on the Xbox and do a hard mod with an HDD swap later on.

Discord: https://discord.gg/U5dJw7x
Systems from the Compaq Portable 1 to Ryzen 9 5950X
Twitch: https://twitch.tv/retropcuser