What retro activity did you get up to today?

Discussion about old PC hardware.

Re: What retro activity did you get up to today?

Postby creepingnet » 2019-10-21 @ 20:30

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.
My DOS Boxen
85' Tandy 1000(a)- 8088/4.77, 640K, 8gb XT-IDE, TGA, 3-voice
89' GEM 286 - 286/12 w/287, 6MB, 1GB SCSI, 2XCD-ROM, ET-4000 1MB, SB Pro2
Creeping Net 486 - 486DX4100 WB, 128MB, 512K L2, 15GB+40GB, S3 809 2MB VLB SVGA, SBAWE64
User avatar
creepingnet
Member
 
Posts: 351
Joined: 2012-12-15 @ 05:51
Location: Trapped In the Computer

Re: What retro activity did you get up to today?

Postby liqmat » 2019-10-21 @ 21:08

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

Image

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?
User avatar
liqmat
Oldbie
 
Posts: 1718
Joined: 2015-7-07 @ 21:59

Re: What retro activity did you get up to today?

Postby appiah4 » 2019-10-21 @ 21:21

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.
A500:Rev6|+512K|ACA500+|C1084S
i386:Am386SX25|4M|GD5402|ES688
i486:U5S33|8M|GD5428|YMF719|DB-S2
i586:P133|32M|T64+/MX2|V1|CT3980/32M
i686:K6-2/400|128M|Rage|V2|CT4520/32M
S370:P3-1200|384M|GF4-4200|MX300
S754:A3700+|2G|X1950PRO|SB0350
User avatar
appiah4
l33t
 
Posts: 4134
Joined: 2017-2-19 @ 07:36

Re: What retro activity did you get up to today?

Postby henryVK » 2019-10-22 @ 06:16

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.
User avatar
henryVK
Member
 
Posts: 324
Joined: 2017-12-29 @ 20:26
Location: Europe

Re: What retro activity did you get up to today?

Postby kolderman » 2019-10-22 @ 06:19

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


Try bumping up the resolution.
kolderman
Member
 
Posts: 291
Joined: 2019-5-12 @ 04:22

Re: What retro activity did you get up to today?

Postby liqmat » 2019-10-22 @ 06:27

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.
User avatar
liqmat
Oldbie
 
Posts: 1718
Joined: 2015-7-07 @ 21:59

Re: What retro activity did you get up to today?

Postby appiah4 » 2019-10-22 @ 06:39

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.
A500:Rev6|+512K|ACA500+|C1084S
i386:Am386SX25|4M|GD5402|ES688
i486:U5S33|8M|GD5428|YMF719|DB-S2
i586:P133|32M|T64+/MX2|V1|CT3980/32M
i686:K6-2/400|128M|Rage|V2|CT4520/32M
S370:P3-1200|384M|GF4-4200|MX300
S754:A3700+|2G|X1950PRO|SB0350
User avatar
appiah4
l33t
 
Posts: 4134
Joined: 2017-2-19 @ 07:36

Re: What retro activity did you get up to today?

Postby Deksor » 2019-10-22 @ 08:58

Metabyte managed to reach 1024*600 with a single voodoo 2 with their wicked 3d drivers ^^
Deksor
Oldbie
 
Posts: 1834
Joined: 2016-6-07 @ 14:37

Re: What retro activity did you get up to today?

Postby Peter Swinkels » 2019-10-22 @ 14:37

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):

Code: Select all
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
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.
Peter Swinkels
Newbie
 
Posts: 79
Joined: 2005-11-16 @ 20:32
Location: The Netherlands

Re: What retro activity did you get up to today?

Postby schmatzler » 2019-10-22 @ 18:52

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...
schmatzler
Member
 
Posts: 152
Joined: 2017-1-08 @ 00:44

Re: What retro activity did you get up to today?

Postby xjas » 2019-10-22 @ 19:06

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 Basic for DOS):

Code: Select all
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
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. :)
User avatar
xjas
l33t
 
Posts: 2170
Joined: 2015-9-07 @ 02:29

Re: What retro activity did you get up to today?

Postby looking4awayout » 2019-10-22 @ 19:43

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.5GHz | 1.5GB PC133 SDRAM | Gecube Radeon X1950 Pro 256MB OC | 500GB WD Blue SSD + 300GB WD Velociraptor | Sound Blaster AWE64 Value | Windows XP Professional SP3
User avatar
looking4awayout
Member
 
Posts: 208
Joined: 2017-8-08 @ 10:48
Location: Europe

Re: What retro activity did you get up to today?

Postby FAMICOMASTER » 2019-10-22 @ 22:42

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?
User avatar
FAMICOMASTER
Member
 
Posts: 273
Joined: 2014-8-09 @ 18:15
Location: United States of America

Re: What retro activity did you get up to today?

Postby Thermalwrong » 2019-10-23 @ 00:21

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 :D

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 :)
Thermalwrong
Member
 
Posts: 328
Joined: 2018-3-18 @ 19:24
Location: England

Re: What retro activity did you get up to today?

Postby FAMICOMASTER » 2019-10-23 @ 03:10

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.

Image
And in the dark, because P31 looks coolest in the dark
Image
User avatar
FAMICOMASTER
Member
 
Posts: 273
Joined: 2014-8-09 @ 18:15
Location: United States of America

Re: What retro activity did you get up to today?

Postby bfcastello » 2019-10-23 @ 03:18

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 Basic for DOS):

Code: Select all
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
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.
User avatar
bfcastello
Member
 
Posts: 332
Joined: 2017-9-07 @ 02:39
Location: Rio de Janeiro, Brazil and Catalonia, Spain

Re: What retro activity did you get up to today?

Postby Caluser2000 » 2019-10-23 @ 03:32

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.
User avatar
Caluser2000
Oldbie
 
Posts: 1377
Joined: 2014-10-21 @ 05:34

Re: What retro activity did you get up to today?

Postby FAMICOMASTER » 2019-10-23 @ 04:48

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.
User avatar
FAMICOMASTER
Member
 
Posts: 273
Joined: 2014-8-09 @ 18:15
Location: United States of America

Re: What retro activity did you get up to today?

Postby Caluser2000 » 2019-10-23 @ 05:43

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.
User avatar
Caluser2000
Oldbie
 
Posts: 1377
Joined: 2014-10-21 @ 05:34

Re: What retro activity did you get up to today?

Postby looking4awayout » 2019-10-23 @ 10:29

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.5GHz | 1.5GB PC133 SDRAM | Gecube Radeon X1950 Pro 256MB OC | 500GB WD Blue SSD + 300GB WD Velociraptor | Sound Blaster AWE64 Value | Windows XP Professional SP3
User avatar
looking4awayout
Member
 
Posts: 208
Joined: 2017-8-08 @ 10:48
Location: Europe

PreviousNext

Return to General Old Hardware

Who is online

Users browsing this forum: Bige4u, BinaryDemon, knowledge [bot], wirerogue and 15 guests