VOGONS


Reply 13380 of 27424, by Bruninho

User metadata
Rank Oldbie
Rank
Oldbie

fixed an ipod nano gen 1 and filled it to the top with 233 songs. (well, they are 320kbps mp3). And created an on the go playlist with only 80's songs, like Take On Me, Billie Jean, Eye of The Tiger, No Easy Way Out, I Love Rock and Roll, and so on... right now enjoying it at work =)

It's quite scratched, it wasn't mine though, I am looking for ways to make it look a little better. Maybe wrap some custom skin?

Attachments

Last edited by Bruninho on 2019-11-05, 13:00. Edited 1 time in total.

"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 13381 of 27424, by bjwil1991

User metadata
Rank l33t
Rank
l33t

Had to do some repairs on two laptops in my collection. First one was the IBM ThinkPad R40 and the infamous fan error. Fan was working without issues upon power on, but it threw the error after the memory count. I took a quick peek under the hood and found the connector for the fan was loose and somehow got off of the contacts on the board. I used the solder wick to clean off the old, crappy, lead-free solder and put on new lead solder. It still did not work, however, when I pressed the power connector for the fan forward, it sprang to life and would only work with that. I then took the fan out again, pressed the connector on the board forward, and held it there whilst using my other hand to solder the contacts to the board. After I waited a while for the solder to do its thing after I moved the soldering iron back into the holster, I let go of the connector and it stayed in place. I also added some solder to the grounding pads on the side in case that was loose as well. After that, I buttoned everything back together, yet I kept the keyboard a bit forward so I can watch the fan progress and to check for any other problems before putting it back together completely. Fan started to work like normal and the error message went away.

Then, my Toshiba Satellite Pro 410CDT was acting strange. First off, when I was installing the external CD drive drivers for MS-DOS/Windows 3.1 on my 2GB CF card, the screen was acting wonky. Picture was going fuzzy, and all of a sudden after pressing enter twice to restart the laptop after the drivers got installed, the screen went white as a ghost. Took it apart and cleaned the video board, as well as the contacts from the display/inverter board cables that connect to the video board and it sprang to life again, then it went out again. Found lots of white crud on the LIF socket for the video board and cleaned that up rather nicely and scrubbed the contacts with a toothbrush (yes, I know, bad idea) and electrical contact cleaner (I need DeoxIt badly again) and a broken end of a Q-tip. All of that crud went away and I also noticed the CMOS battery header had corrosion on there, but no damage done to the motherboard, which is yet to be determined. I let everything sit overnight and connected almost everything, minus the CF to IDE adapter, laptop battery, and the external CD drive that connects to the parallel port (oddball for a 1998 external CD drive, but I believe that was the norm until 2001 when they phased out USB external drives) this morning. Sprang back to life and once I get home from work, I will finish it off and do a double-check on everything to make sure it's fully functional before installing Windows 95 Upgrade on my 2GB CF card.

Also, when I connected the external CD drive to power, I turned it on, ejected the CD drive, and found another copy of Windows 95 on CD. So now I have 4 legal copies of 95: 95 Upgrade, 95C (two of them), and I believe this disc is 95B, but that is yet TBD.

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

Reply 13382 of 27424, by PTherapist

User metadata
Rank Oldbie
Rank
Oldbie

Spent hours today working on and battling my 486.

First of all I measured the voltage from the old external lithium-ion CMOS battery and it's still holding strong after all these years. I don't keep these things connected inside whilst the PC is in storage though, so that's possibly why. I did measure a 2nd external battery, rated as 4.5V alkaline, but it came out as 0.11v so it's pretty much toast.

The network card in the 486 suddenly started working fine after I reattached the BIOS battery, which is weird. However...

I then lost the function of my PS/2 mouse and every reboot of Windows 95 afterwards lead to no keyboard either whilst the mouse was connected. I had an idea what was causing the problem and subsequently running the config program for my 3C509B network card confirmed it - I'd set the network card to use IRQ 12 same as the PS/2 mouse. Once I sorted that stupid mistake, everything was up and running perfectly.

So now I'm in the process of transferring some games over to it via Windows file sharing over the network. So we're talking 10Mbps and the slow disk read/write speeds of a 486. 2.3GB is gonna take a couple of hours. 🤣 🤣

Reply 13383 of 27424, by Bruninho

User metadata
Rank Oldbie
Rank
Oldbie
PTherapist wrote:

So now I'm in the process of transferring some games over to it via Windows file sharing over the network. So we're talking 10Mbps and the slow disk read/write speeds of a 486. 2.3GB is gonna take a couple of hours. 🤣 🤣

I took 18 hours to convert 263 high quality songs to MP3 320kbps at 1x conversion speed just so I could put them on my 2GB iPod Nano, surely you won't take 18 hours to transfer 2.3GBs... 😜

"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 13384 of 27424, by PTherapist

User metadata
Rank Oldbie
Rank
Oldbie
bfcastello wrote:
PTherapist wrote:

So now I'm in the process of transferring some games over to it via Windows file sharing over the network. So we're talking 10Mbps and the slow disk read/write speeds of a 486. 2.3GB is gonna take a couple of hours. 🤣 🤣

I took 18 hours to convert 263 high quality songs to MP3 320kbps at 1x conversion speed just so I could put them on my 2GB iPod Nano, surely you won't take 18 hours to transfer 2.3GBs... 😜

I do have another 28GB of data to transfer across though, but I don't quite think I've got the patience to wait for what would possibly take a couple of days to complete. I'll probably pull out the HDD and do it in one of my modern systems instead. 🤣

Reply 13385 of 27424, by bjwil1991

User metadata
Rank l33t
Rank
l33t
PTherapist wrote:
Spent hours today working on and battling my 486. […]
Show full quote

Spent hours today working on and battling my 486.

First of all I measured the voltage from the old external lithium-ion CMOS battery and it's still holding strong after all these years. I don't keep these things connected inside whilst the PC is in storage though, so that's possibly why. I did measure a 2nd external battery, rated as 4.5V alkaline, but it came out as 0.11v so it's pretty much toast.

The network card in the 486 suddenly started working fine after I reattached the BIOS battery, which is weird. However...

I then lost the function of my PS/2 mouse and every reboot of Windows 95 afterwards lead to no keyboard either whilst the mouse was connected. I had an idea what was causing the problem and subsequently running the config program for my 3C509B network card confirmed it - I'd set the network card to use IRQ 12 same as the PS/2 mouse. Once I sorted that stupid mistake, everything was up and running perfectly.

So now I'm in the process of transferring some games over to it via Windows file sharing over the network. So we're talking 10Mbps and the slow disk read/write speeds of a 486. 2.3GB is gonna take a couple of hours. 🤣 🤣

It shouldn't take that long as long as you use straight up Ethernet between the systems. Also, I would advise you that the same username and password is required so that you won't get a message saying cannot connect to \\computer on your main tower or another system. I am planning on turning a Windows 98SE machine as a Dial-Up Server to connect my Packard Bell Pack-Mate 28 Plus to the network and see how slow it'll go transferring files and stuff.

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

Reply 13386 of 27424, by PTherapist

User metadata
Rank Oldbie
Rank
Oldbie
bjwil1991 wrote:

It shouldn't take that long as long as you use straight up Ethernet between the systems. Also, I would advise you that the same username and password is required so that you won't get a message saying cannot connect to \\computer on your main tower or another system. I am planning on turning a Windows 98SE machine as a Dial-Up Server to connect my Packard Bell Pack-Mate 28 Plus to the network and see how slow it'll go transferring files and stuff.

It's currently transferring at around 1.5Mbps and completely saturating the 486 IDE, literally cannot even open the Start menu. 🤣

Mind you I'm not going direct PC to PC either, the ethernet setup is more like: My PC > Switch > Linux Server Bridge > 2nd Switch > 486. Sounds nuts, but I have so many devices networked up around the house, with multiple switches & routers so it's currently the best compromise.

And transferring stuff at dial-up speeds? Wow, that would be both frustrating to experience and yet fun to witness all at the same time. 😎

Reply 13387 of 27424, by bjwil1991

User metadata
Rank l33t
Rank
l33t

The Dial-up modem in my 486 is 2400 baud. That'll be slow and the only option for connecting to the network once I find a Gravis UltraSound card at a good price.

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

Reply 13388 of 27424, by ShovelKnight

User metadata
Rank Oldbie
Rank
Oldbie

Finally installed Gotek into my Super Socket 7 PC. I guess this counts as a retro activity despite the fact that the Gotek is a fairly new contraption. I also discovered that it’s too short to sit level with the front bezel of my case (CM Elite 360). I need to drill new holes in the Gotek enclosure to move it further away from the motherboard, but in this case I would also need a longer floppy cable. Currently the setup works, it just looks ugly 😀

Reply 13389 of 27424, by TheAbandonwareGuy

User metadata
Rank Oldbie
Rank
Oldbie

Anybody here have good recomendations for a soldering starter kit? I'm sick and tired of my parts crapping themselfes and not being able to attempt any serious repairs. Basically I'm looking for recommendations for:

* A Soldering Iron in the $50 range that works good for electronics.
* Common cap values I should just go ahead and order to keep in stock.
* Some sort of "holding device" to hold whatever I'm working on while these meat claws of hands I'm stuck with try to fumble with tiny caps.
* Some sort of gloves, that are flexible but provide at least some burn protection. (again, meat claws for hands)

Cyb3rst0rms Retro Hardware Warzone: https://discord.gg/jK8uvR4c
I used to own over 160 graphics card, I've since recovered from graphics card addiction

Reply 13390 of 27424, by Deksor

User metadata
Rank l33t
Rank
l33t

@TheAbandonwareGuy

- Get a TS100 it's much better than the Yihua 936 (they're great for their price, but the TS100 is more advanced and less cheaply made hence why it's more expensive)
- I don't think people would recommend storing caps as they're chemical and degrade over time
- I think this is called "third hand' they come with two metallic claws and often a magnifying glass
- I don't think this kind of glove exist. Wearing gloves is actually a bad idea to solder because molten plastic will glue to your skin and burn you longer than the soldering iron itself. And I don't think that there are good burn protecting gloves that are thin enough to be that flexible.

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

Reply 13391 of 27424, by Peter Swinkels

User metadata
Rank Oldbie
Rank
Oldbie

In the reply to my last post I read someone mentioned approving of Qbasic programming. So here's some more stuff I made:

DEFINT A-Z
DECLARE SUB ComputerMakeMove ()
DECLARE SUB DisplayHelp ()
DECLARE SUB DrawDisk (Column, Row, ColorO)
DECLARE SUB DrawDisks ()
DECLARE SUB DropDisk (Column, ColorO)
DECLARE SUB FindMoves (ColorO, TriggerLength, AllowHelpingOpponent)
DECLARE SUB GreyOutDisks ()
DECLARE SUB InitializeGame ()
DECLARE SUB PlayGame ()
DECLARE FUNCTION CountDisks (StartColumn, StartRow, ColorO, XDirection, YDirection)
DECLARE FUNCTION Disks (Column, Row, NewDisk, ResetDisks)
DECLARE FUNCTION FoundMoves ()
DECLARE FUNCTION GameDone ()
DECLARE FUNCTION GetGameState ()
DECLARE FUNCTION MoveHelpsOpponent (OpponentColor, Column)
DECLARE FUNCTION StateText$ ()
DECLARE FUNCTION WinningPlayer ()

CONST FALSE = 0
CONST TRUE = -1

CONST DCOutsideField = 0
CONST DCNone = 1
CONST DCRed = 2
CONST DCYellow = 3

CONST GSNeitherPlaying = 0
CONST GSRedPlaying = 1
CONST GSRedWon = 2
CONST GSTied = 3
CONST GSYellowPlaying = 4
CONST GSYellowWon = 5

CONST DropDelay! = .1
CONST FirstColumn = 0
CONST FirstRow = 0
CONST LastColumn = 6
CONST LastRow = 5
CONST NoColumn = -1
CONST SlotSize = 50
CONST WinningLength = 4

DIM SHARED ComputerColor
DIM SHARED CurrentDisks(FirstColumn TO LastColumn, FirstRow TO LastRow)
DIM SHARED CurrentPlayer
DIM SHARED FirstColor
DIM SHARED HumanColor
DIM SHARED MovesFound(FirstColumn TO LastColumn)
DIM SHARED SelectedColumn

SCREEN 12: CLS : WIDTH 80, 30: WINDOW SCREEN (-145, -90)-(494, 429)
PlayGame

SUB ComputerMakeMove
DIM Column
DIM TriggerLength

FindMoves ComputerColor, WinningLength, TRUE
IF NOT FoundMoves THEN
Show last 471 lines
      FindMoves HumanColor, WinningLength, FALSE
IF NOT FoundMoves THEN
FOR TriggerLength = WinningLength TO 0 STEP -1
FindMoves ComputerColor, TriggerLength, FALSE
IF FoundMoves THEN EXIT FOR
NEXT TriggerLength

IF NOT FoundMoves THEN
FOR TriggerLength = WinningLength TO 0 STEP -1
FindMoves HumanColor, TriggerLength, TRUE
IF FoundMoves THEN EXIT FOR
NEXT TriggerLength
END IF
END IF
END IF

IF FoundMoves THEN
DO
Column = INT(RND * (LastColumn + 1)) + FirstColumn
IF MovesFound(Column) THEN
DropDisk Column, CurrentPlayer
EXIT DO
END IF
LOOP
END IF
END SUB

FUNCTION CountDisks (StartColumn, StartRow, ColorO, XDirection, YDirection)
DIM CheckCount
DIM Column
DIM DiskCount
DIM Row

Column = StartColumn
CheckCount = 0
DiskCount = 0
Row = StartRow
DO WHILE CheckCount < WinningLength
SELECT CASE Disks(Column, Row, DCNone, FALSE)
CASE ColorO
DiskCount = DiskCount + 1
CASE NOT DCNone
EXIT DO
END SELECT

Column = Column + XDirection
Row = Row + YDirection
CheckCount = CheckCount + 1
LOOP

CountDisks = DiskCount
END FUNCTION

FUNCTION Disks (Column, Row, NewDisk, ResetDisks)
DIM Disk

Disk = DCOutsideField

IF ResetDisks THEN
ERASE CurrentDisks
Disk = DCNone

FOR Column = FirstColumn TO LastColumn
FOR Row = FirstRow TO LastRow
CurrentDisks(Column, Row) = DCNone
NEXT Row
NEXT Column
ELSE
IF Column >= FirstColumn AND Column <= LastColumn THEN
IF Row >= FirstRow AND Row <= LastRow THEN
IF NOT NewDisk = DCNone THEN CurrentDisks(Column, Row) = NewDisk
Disk = CurrentDisks(Column, Row)
END IF
END IF
END IF

Disks = Disk
END FUNCTION

SUB DisplayHelp
CLS : COLOR 15
PRINT
PRINT SPC(3); "Connect Four - Help"
PRINT
PRINT SPC(3); "Keys:"
PRINT SPC(3); "F1 = This help."
PRINT SPC(3); "F2 = No computer player."
PRINT SPC(3); "F3 = Computer plays as red."
PRINT SPC(3); "F4 = Computer plays as yellow."
PRINT SPC(3); "A = Restart game."
PRINT SPC(3); "Q = Quit game."
PRINT SPC(3); "R = Red plays first."
PRINT SPC(3); "Y = Yellow plays first."
PRINT SPC(3); "1-7 = Drop disk into column."
DO WHILE INKEY$ = "": LOOP
END SUB

SUB DrawDisk (Column, Row, ColorO)
LINE (Column * SlotSize, Row * SlotSize)-STEP(SlotSize, SlotSize), 0, B
CIRCLE ((Column + .5) * SlotSize, (Row + .5) * SlotSize), SlotSize / 2.5, 0
SELECT CASE ColorO
CASE DCNone
COLOR 11
CASE DCRed
COLOR 12
CASE DCYellow
COLOR 14
END SELECT
PAINT ((Column + .5) * SlotSize, (Row + .5) * SlotSize), , 0
END SUB

SUB DrawDisks
DIM Column
DIM Row

CLS
LINE (-1, -1)-(((ABS(LastColumn - FirstColumn) + 1) * SlotSize) + 1, ((ABS(LastRow - FirstRow) + 1) * SlotSize) + 1), 7, BF
LINE (0, 0)-((ABS(LastColumn - FirstColumn) + 1) * SlotSize, (ABS(LastRow - FirstRow) + 1) * SlotSize), 1, BF
FOR Column = FirstColumn TO LastColumn
FOR Row = FirstRow TO LastRow
DrawDisk Column, Row, Disks(Column, Row, DCNone, FALSE)
NEXT Row
NEXT Column
END SUB

SUB DropDisk (Column, ColorO)
DIM DelayStart!
DIM Disk
DIM KeyStroke$
DIM Row

IF Disks(Column, FirstRow, DCNone, FALSE) = DCNone THEN
Row = FirstRow
DO
DrawDisk Column, Row, ColorO

IF Row = LastRow THEN
EXIT DO
ELSE
IF NOT Disks(Column, Row + 1, DCNone, FALSE) = DCNone THEN EXIT DO
END IF

DelayStart! = TIMER
DO WHILE TIMER < DelayStart! + DropDelay!
IF TIMER < DelayStart! THEN DelayStart! = TIMER
LOOP

DrawDisk Column, Row, DCNone
Row = Row + 1
KeyStroke$ = INKEY$
LOOP

Disk = Disks(Column, Row, ColorO, FALSE)

SELECT CASE CurrentPlayer
CASE DCRed
CurrentPlayer = DCYellow
CASE DCYellow
CurrentPlayer = DCRed
END SELECT

END IF
SelectedColumn = NoColumn
END SUB

SUB FindMoves (ColorO, TriggerLength, AllowHelpingOpponent)
DIM Column
DIM CheckColumn
DIM CheckCount
DIM CheckRow
DIM DiskCount
DIM FoundMove
DIM Row
DIM XDirection
DIM YDirection

ERASE MovesFound

FOR Column = FirstColumn TO LastColumn
FOR Row = FirstRow TO LastRow
FOR XDirection = -1 TO 1
FOR YDirection = -1 TO 1
IF NOT (XDirection = 0 AND YDirection = 0) THEN
CheckColumn = Column
CheckRow = Row
CheckCount = 0
DiskCount = 0
FoundMove = NoColumn

DO UNTIL CheckCount = TriggerLength
SELECT CASE Disks(CheckColumn, CheckRow, DCNone, FALSE)
CASE ColorO
DiskCount = DiskCount + 1
CASE DCNone
SELECT CASE Disks(CheckColumn, CheckRow + 1, DCNone, FALSE)
CASE DCRed, DCYellow, DCOutsideField
FoundMove = CheckColumn
END SELECT
CASE ELSE
EXIT DO
END SELECT

CheckColumn = CheckColumn + XDirection
CheckRow = CheckRow + YDirection
CheckCount = CheckCount + 1
LOOP

IF DiskCount = TriggerLength - 1 THEN
IF NOT FoundMove = NoColumn THEN
IF AllowHelpingOpponent THEN
MovesFound(FoundMove) = TRUE
ELSE
IF NOT MoveHelpsOpponent(HumanColor, FoundMove) THEN MovesFound(FoundMove) = TRUE
END IF
END IF
END IF
END IF
NEXT YDirection
NEXT XDirection
NEXT Row
NEXT Column
END SUB

FUNCTION FoundMoves
DIM Column
DIM Found

Found = FALSE
FOR Column = FirstColumn TO LastColumn
IF MovesFound(Column) THEN
Found = TRUE
EXIT FOR
END IF
NEXT Column

FoundMoves = Found
END FUNCTION

FUNCTION GameDone
DIM Column
DIM Done

Done = TRUE
FOR Column = FirstColumn TO LastColumn
IF Disks(Column, FirstRow, DCNone, FALSE) = DCNone THEN
Done = FALSE
EXIT FOR
END IF
NEXT Column

GameDone = Done
END FUNCTION

FUNCTION GetGameState
DIM GameState

SELECT CASE WinningPlayer
CASE DCNone
IF GameDone THEN
GameState = GSTied
ELSE
SELECT CASE CurrentPlayer
CASE DCNone
GameState = GSNeitherPlaying
CASE DCRed
GameState = GSRedPlaying
CASE DCYellow
GameState = GSYellowPlaying
END SELECT
END IF
CASE DCRed
GameState = GSRedWon
CASE DCYellow
GameState = GSYellowWon
END SELECT

GetGameState = GameState
END FUNCTION

SUB GreyOutDisks
DIM Column
DIM Row

FOR Column = FirstColumn TO LastColumn
FOR Row = FirstRow TO LastRow
CIRCLE ((Column + .5) * SlotSize, (Row + .5) * SlotSize), SlotSize / 2.5, 0
SELECT CASE Disks(Column, Row, DCNone, FALSE)
CASE DCRed
COLOR 4
CASE DCYellow
COLOR 6
CASE ELSE
COLOR 8
END SELECT
PAINT ((Column + .5) * SlotSize, (Row + .5) * SlotSize), , 0
NEXT Row
NEXT Column
END SUB

SUB InitializeGame
STATIC CurrentFirstColor

RANDOMIZE TIMER
CurrentPlayer = DCNone
tmp = Disks(FirstColumn, FirstRow, DCNone, TRUE)
DrawDisks
GreyOutDisks
SelectedColumn = NoColumn

COLOR 15: LOCATE 3, 3: PRINT "Connect Four, by: Peter Swinkels - press any key."
DO WHILE INKEY$ = "": LOOP
DrawDisks
CurrentPlayer = FirstColor
END SUB

FUNCTION MoveHelpsOpponent (OpponentColor, Column)
DIM HelpsOpponent
DIM Row
DIM XDirection
DIM YDirection

HelpsOpponent = FALSE
Row = 0
DO UNTIL (Row = LastRow) OR (NOT Disks(Column, Row + 1, DCNone, FALSE) = DCNone) OR (NOT InterfaceWindow.Visible)
Row = Row + 1
LOOP

IF Row > FirstRow THEN
Row = Row - 1

FOR XDirection = -1 TO 1
FOR YDirection = -1 TO 1
IF NOT (XDirection = 0 AND YDirection = 0) THEN
IF CountDisks(Column, Row, OpponentColor, XDirection, YDirection) = WinningLength - 1 THEN
HelpsOpponent = TRUE
END IF
END IF
NEXT YDirection
NEXT XDirection
END IF

MoveHelpsOpponent = HelpsOpponent
END FUNCTION

SUB PlayGame
DIM KeyStroke$

ComputerColor = DCYellow
FirstColor = DCRed
HumanColor = DCRed

InitializeGame

DO
COLOR 15
LOCATE 3, 3: PRINT "Connect Four - F1 = Help"
LOCATE 5, 1: PRINT SPACE$(80)
LOCATE 5, 20: PRINT StateText

SELECT CASE GetGameState
CASE GSRedPlaying, GSYellowPlaying
IF NOT CurrentPlayer = ComputerColor THEN
DO
KeyStroke$ = INKEY$
LOOP WHILE KeyStroke$ = ""
SELECT CASE KeyStroke$
CASE "A", "a"
InitializeGame
CASE "Q", "q"
SCREEN 0: WIDTH 80, 25: COLOR 7, 0: CLS
END
CASE "R", "r"
FirstColor = DCRed
InitializeGame
CASE "Y", "y"
FirstColor = DCYellow

InitializeGame
CASE CHR$(0) + ";"
DisplayHelp
DrawDisks
CASE CHR$(0) + "<"
ComputerColor = DCNone

InitializeGame
CASE CHR$(0) + "="
ComputerColor = DCRed
HumanColor = DCYellow

InitializeGame
CASE CHR$(0) + ">"
ComputerColor = DCYellow
HumanColor = DCRed

InitializeGame
CASE "1" TO "7"
IF NOT GetGameState = GSNeitherPlaying THEN SelectedColumn = VAL(KeyStroke$) - 1
END SELECT
END IF
END SELECT

SELECT CASE GetGameState
CASE GSRedPlaying, GSYellowPlaying
IF ComputerColor = DCNone THEN
IF NOT SelectedColumn = NoColumn THEN DropDisk SelectedColumn, CurrentPlayer
ELSE
IF CurrentPlayer = ComputerColor THEN
ComputerMakeMove
ELSE
IF NOT SelectedColumn = NoColumn THEN DropDisk SelectedColumn, CurrentPlayer
END IF
END IF
CASE GSRedWon, GSYellowWon, GSTied
GreyOutDisks
DO WHILE INKEY$ = "": LOOP
InitializeGame
END SELECT
LOOP
END SUB

FUNCTION StateText$
DIM Text$

Text$ = ""
SELECT CASE GetGameState
CASE GSNeitherPlaying
Text$ = "Inactive."
CASE GSRedPlaying
Text$ = "Red's turn."
CASE GSYellowPlaying
Text$ = "Yellow's turn."
CASE GSRedWon
Text$ = "Red won."
CASE GSYellowWon
Text$ = "Yellow won."
CASE GSTied
Text$ = "Game is tied."
END SELECT

StateText$ = Text$
END FUNCTION

FUNCTION WinningPlayer
DIM ColorO
DIM Column
DIM Row
DIM XDirection
DIM YDirection
DIM Winner

Winner = DCNone

FOR ColorO = DCRed TO DCYellow
FOR Column = FirstColumn TO LastColumn
FOR Row = FirstRow TO LastRow
FOR XDirection = -1 TO 1
FOR YDirection = -1 TO 1
IF NOT (XDirection = 0 AND YDirection = 0) THEN
IF CountDisks(Column, Row, ColorO, XDirection, YDirection) = WinningLength THEN
Winner = ColorO
END IF
END IF
NEXT YDirection
NEXT XDirection
NEXT Row
NEXT Column
NEXT ColorO

WinningPlayer = Winner
END FUNCTION

A Connect Four game. Enjoy.

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 13392 of 27424, by ShovelKnight

User metadata
Rank Oldbie
Rank
Oldbie

I've been using a Chinese soldering iron (A-BF GS90D) for a few years now and it's been flawless. It was recommended to me by a mobile phone repair technician who highly praised it. It takes Hakko-compatible tips and is temperature-regulated. Since it's 90W it can output a lot of heat if needed (e.g. when soldering/desoldering ground connections).

Reply 13393 of 27424, by bjwil1991

User metadata
Rank l33t
Rank
l33t

Last night, I did some more work on my Toshiba Satellite Pro 410CDT that suffered from a display issue, but, I did test the video before placing everything back in the laptop before I left for work and the display did work then and after connecting and screwing in everything, the display is fully functional once again and I will do some more stress tests on it and my external 24x CD-ROM parallel port drive works with the system in both MS-DOS and Windows 95 (upgraded to 95 from Windows 3.1) and it's coming along pretty well. Still need to find a 4x CD-ROM drive for the laptop so I can use the floppy drive externally and a new RTC battery along with a connector for it (need to figure out the dimensions and the space between the pins prior to purchasing the part) since it has corrosion.

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

Reply 13394 of 27424, by Peter Swinkels

User metadata
Rank Oldbie
Rank
Oldbie

Improved version of a Qbasic Tetris clone I posted a few weeks ago:

DEFINT A-Z

DECLARE FUNCTION GetRotatedShapeMap$ (Shape, Angle)
DECLARE FUNCTION GetShapeMap$ (Shape)
DECLARE FUNCTION RandomShapeX ()
DECLARE FUNCTION ShapeCanMove (Map$, XDirection, YDirection)
DECLARE SUB CheckForFullRows ()
DECLARE SUB CreateShape ()
DECLARE SUB DisplayStatus ()
DECLARE SUB DrawBlock (BlockColor$, PitX, PitY)
DECLARE SUB DrawPit ()
DECLARE SUB DrawShape (EraseShape)
DECLARE SUB DropShape ()
DECLARE SUB InitializeGame ()
DECLARE SUB Main ()
DECLARE SUB RemoveFullRow (RemovedRow)
DECLARE SUB SettleActiveShapeInPit ()

CONST BLOCKSCALE = 24
CONST FALSE = 0
CONST LASTSIDEBLOCK = 3
CONST NOBLOCK$ = "0"
CONST PITHEIGHT = 16
CONST PITLEFT = 8
CONST PITTOP = 2
CONST PITWIDTH = 10
CONST SIDEBLOCKCOUNT = 4
CONST TRUE = -1

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

InitializeGame
Main

SUB CheckForFullRows ()
FullRow = FALSE

FOR PitY = 0 TO PITHEIGHT - 1
FullRow = TRUE
FOR PitX = 0 TO PITWIDTH - 1
IF MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1) = NOBLOCK$ THEN
FullRow = FALSE
EXIT FOR
END IF
NEXT PitX
IF FullRow THEN RemoveFullRow PitY
NEXT PitY
END SUB

SUB CreateShape ()
DropRate! = 1
Shape = INT(RND * 6)
ShapeAngle = INT(RND * 4)
ShapeMap$ = GetRotatedShapeMap$(Shape, ShapeAngle)
ShapeX = RandomShapeX
ShapeY = -SIDEBLOCKCOUNT
END SUB

SUB DisplayStatus ()
COLOR 4
Show last 260 lines
    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 (BlockColor$, PitX, PitY)
DrawX = PitX * BLOCKSCALE
DrawY = PitY * BLOCKSCALE

LINE (DrawX + (PITLEFT * BLOCKSCALE), DrawY + (PITTOP * BLOCKSCALE))-STEP(BLOCKSCALE, BLOCKSCALE), VAL("&H" + BlockColor$), 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
BlockColor$ = "4"
ELSE
BlockColor$ = MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1)
END IF

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

SUB DrawShape (EraseShape)
FOR BlockX = 0 TO LASTSIDEBLOCK
FOR BlockY = 0 TO LASTSIDEBLOCK
PitX = ShapeX + BlockX
PitY = ShapeY + BlockY
IF PitX >= 0 AND PitX < PITWIDTH AND PitY >= 0 AND PitY < PITHEIGHT THEN
IF EraseShape THEN
BlockColor$ = MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1)
ELSE
BlockColor$ = MID$(ShapeMap$, ((SIDEBLOCKCOUNT * BlockY) + BlockX) + 1, 1)
IF BlockColor$ = NOBLOCK$ THEN BlockColor$ = MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1)
END IF
DrawBlock BlockColor$, PitX, PitY
END IF
NEXT BlockY
NEXT BlockX
END SUB

SUB DropShape ()
IF ShapeCanMove(ShapeMap$, 0, 1) THEN
DrawShape TRUE
IF DropRate! > 0 THEN SOUND 37, .3
ShapeY = ShapeY + 1
DrawShape FALSE
ELSE
SettleActiveShapeInPit

GameOver = (ShapeY < 0)

CheckForFullRows
DrawPit
DisplayStatus

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

FUNCTION GetRotatedShapeMap$ (Shape, Angle)
Map$ = GetShapeMap$(Shape)
NewBlockX = 0
NewBlockY = 0
RotatedMap$ = STRING$(SIDEBLOCKCOUNT * SIDEBLOCKCOUNT, NOBLOCK$)

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

MID$(RotatedMap$, ((SIDEBLOCKCOUNT * NewBlockY) + NewBlockX) + 1, 1) = MID$(Map$, ((SIDEBLOCKCOUNT * 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 = FALSE
Pit$ = STRING$(PITWIDTH * PITHEIGHT, NOBLOCK$)
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 TRUE
IF ShapeAngle = 3 THEN NewAngle = 0 ELSE NewAngle = ShapeAngle + 1
RotatedMap$ = GetRotatedShapeMap(Shape, NewAngle)
IF ShapeCanMove(RotatedMap$, 0, 0) THEN
ShapeAngle = NewAngle
ShapeMap$ = RotatedMap$
END IF
DrawShape FALSE
CASE CHR$(0) + "K"
DrawShape TRUE
IF ShapeCanMove(ShapeMap$, -1, 0) THEN ShapeX = ShapeX - 1
DrawShape FALSE
CASE CHR$(0) + "M"
DrawShape TRUE
IF ShapeCanMove(ShapeMap$, 1, 0) THEN ShapeX = ShapeX + 1
DrawShape FALSE
CASE " "
DropRate! = 0
END SELECT
END IF
LOOP
END SUB

FUNCTION RandomShapeX ()
IntendedShapeX = INT(RND * (PITWIDTH - 1))
ShapeX = 0

FOR XMove = 0 TO IntendedShapeX
IF ShapeCanMove(ShapeMap$, 1, 0) THEN
ShapeX = ShapeX + 1
ELSE
EXIT FOR
END IF
NEXT XMove

RandomShapeX = ShapeX
END FUNCTION

SUB RemoveFullRow (RemovedRow)
FOR PitY = RemovedRow TO 0 STEP -1
FOR PitX = 0 TO PITWIDTH - 1
IF PitY = 0 THEN
BlockColor$ = NOBLOCK$
ELSE
BlockColor$ = MID$(Pit$, ((PITWIDTH * (PitY - 1)) + PitX) + 1, 1)
END IF

MID$(Pit$, ((PITWIDTH * PitY) + PitX) + 1, 1) = BlockColor$
NEXT PitX
NEXT PitY

Score = Score + 1
END SUB

SUB SettleActiveShapeInPit ()
PLAY "N21"

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

FUNCTION ShapeCanMove (Map$, XDirection, YDirection)
FOR BlockY = 0 TO LASTSIDEBLOCK
FOR BlockX = 0 TO LASTSIDEBLOCK
IF NOT MID$(Map$, ((SIDEBLOCKCOUNT * BlockY) + BlockX) + 1, 1) = NOBLOCK$ 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) = NOBLOCK$ THEN
ShapeCanMove = FALSE
EXIT FUNCTION
END IF
ELSEIF PitX < 0 OR PitX >= PITWIDTH OR PitY >= PITHEIGHT THEN
ShapeCanMove = FALSE
EXIT FUNCTION
END IF
END IF
NEXT BlockX
NEXT BlockY

ShapeCanMove = TRUE
END FUNCTION

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 13395 of 27424, by bjwil1991

User metadata
Rank l33t
Rank
l33t

I'm going to try it out on my 486 desktop and Pentium 90 laptop. Will this work with a joystick as well or only the keyboard?

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

Reply 13396 of 27424, by Peter Swinkels

User metadata
Rank Oldbie
Rank
Oldbie
bjwil1991 wrote:

I'm going to try it out on my 486 desktop and Pentium 90 laptop. Will this work with a joystick as well or only the keyboard?

Assuming you mean the games I just posted, no neither require or support a joystick. Don't expect anything spectacular. Feel free to modify the code as you please!

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 13397 of 27424, by BetaC

User metadata
Rank Oldbie
Rank
Oldbie

While not the most retro, I managed to RGH my Star Wars Limited Edition Xbox 360. It now sits in the pool of homebrew enabled consoles along side it's 1.2 Xbox older sister, the Rebug PS3 Slim, the FHDB PS2, HBC Wii and WiiU, CFW PSTV/PSP/3DS, launch Switch, Everdrived N64 and Pseudo Saturn Kai enabled Saturn. I'll probably throw something on it once I finish backing up my disks.

ph4ne7-99.png
g32zpm-99.png
0zuv7q-6.png
7y1bp7-6.png