Oh my god, you guys rock! Just a heads up, I'm actually away at Maryland for an Open house this week (wonderful timing on releasing this specific video...), but I'll be back home by mid-week and will start updating the Wiki!
@sloopymalibu Жыл бұрын
Oh, coming to a place near me and dont even make dinner plans? I see how it is! :D More Seriously, see you at VCFe next year?
@RylandBingham Жыл бұрын
I love your channel and your passion for the formative technologies that eventually led to the computer science wonderland that we all get to live in today. Thank you for all you do, I appreciate all your hard work.
@tinyterror8 Жыл бұрын
I'll be there!
@inerlogic Жыл бұрын
where do we send the code, pics, and video to? (my 7-segment displays scroll the message)
@spacewolfjr Жыл бұрын
I was watching this with my friend and his non-verbal brother and all of the sudden his brother shouts "You stupid rabbit, that's not ASCII!". We both jumped because I've heard him speak like twice in 10 years.
@Peter_S_ Жыл бұрын
That diagnostic card actually allows a Z80 installed on it to master the Centurion bus. That's what the unpopulated 40 pin chip is. I figured out what all but a couple of the unpopulated chips are and one of the uninstalled DIP switch positions (SW-8) is used to put the card into master mode given it also has a crystal, Z80, and the rest of the chips installed. WIthout SW-8 installed the card just operates as a peripheral. It appears to have three functional blocks, one base block for CPU5/6 driven diagnostics, one optional block for onboard Z80 driven diagnostics, and one more optional block to exercise the DMA mechanics. Those Centurions could also run CP/M with such a card, and it could run from EPROM.
@connorwood95 Жыл бұрын
CP/M on the Centurion would be so damn cool! I want to see that now, that would be a heck of a project
That was the one of the future plans for the Centurion Diag. PROM Bd. but we never made it happen before bankruptcy. I think the main hardware engineer ( Steve W. ) built only one Centurion Diag. PROM Bd. with the Z80 CPU installed but it never left his office. I personally did the high level hardware & software spec doc and then handed it off to Steve for the hardware design & Terry for the software design.
@Peter_S_ Жыл бұрын
@@kenromaine2387 Thank you for that! As I'm making some high-level guesses, I was wondering if you recall if the Z80 was able to run code in the Centurion memory directly or if it was a more of a byte-at-a-time access to the Centurion's memory space? I could see access through a page long window being probable. If I had to guess, my guess would be that the latches at A7 and A8 provide the high 12 bits of the address and the Z80 sees a 256 byte window of the backplane memory in its own address space. Not quite CP/M capable directly, but if somebody wants to spin a board which has a Z8000 on it, the diagnostic board hold all the keys to making it run.
@kenromaine2387 Жыл бұрын
@@Peter_S_ The Diag. PROM Bd. running with a Z80 installed never was released from the design engineer ( Steve W. ). I know Steve built "one" and the Z80 was talked about but I never touched one installed in the Diag. PROM Bd.
@member57 Жыл бұрын
In class I typed "shitdown /r now" with my instructor looking over my shoulder. He just said "that command won't work" and smiled then walked off.
@markmuir7338 Жыл бұрын
GOORD! An entire episode dedicated to HELLORLD!
@heckelphon Жыл бұрын
We need some sort of bit bucket where we collect all the omitted WOs and DLs!
@d13g0c Жыл бұрын
For me, the best part is that "Hellorld" is 7-seg display friendly. Gotta write it in HP 15C synthetics.
@KurtisRader Жыл бұрын
I am 62 years old and started programming in 1976; i.e., more than four decades ago. I used to subscribe to the IEEE "Annals of the History of Computing" journal. I love what you are doing with this series of videos to show how the immediate past is relevant to computing today. I hope to see more of your work in the future.
@MickOhrberg Жыл бұрын
You had me at Hellorld!
@jarms40 Жыл бұрын
Me too.
@tstahlfsu Жыл бұрын
Yup!
@Davide0033 Жыл бұрын
to be fair, i was starting to miss the "hellord" at the start of the videos this is one of the few series that i still wait for
@whiskeytuesday Жыл бұрын
And it was that moment, hearing David describe something that feels like it was maybe weeks ago as "way back in time", that he realized that he was, in fact, extremely old.
@dariusliadon Жыл бұрын
You need to get Ken or Marc to write a Hellorld program on punchcards for the IBM 1401 at the Computer History Museum!
@kelli217 Жыл бұрын
Heh... better yet, get @CuriousMarc to gather the team together to write something for the AGC to scroll some sort of 'HELLORLD' across the DSKY. 🌕🚀
@dariusliadon Жыл бұрын
That would be fun, but sadly the AGC they had restored has been sold and they no longer have access to it.
@kelli217 Жыл бұрын
@@dariusliadon Sure but they still have a reproduction DSKY and I think there's an emulator...
@dariusliadon Жыл бұрын
@@kelli217 But isn't the whole point of the exercise to run the original hardware?
@kelli217 Жыл бұрын
@@dariusliadon yes. But bear with me a moment: The team he got together before was one of the best chances to get something that _would_ run on actual hardware, even if they no longer have access to any on which to test the program.
@rustandmagic Жыл бұрын
I am still amazed seeing the Centurion matching the car colors ;)
@Pistoletjes Жыл бұрын
This is really inspiring! I'm going to dig up the Z80 reference and start coding.
@DonVintaggio Жыл бұрын
Wow the Centurion aesthetics screams 70s and the cumbersome assembler has a nice direct-to-memory entry and run style too.Of course the detail the whole system takes an entire wall adds up to its cool nostalgic effect.
@edgeeffect Жыл бұрын
Considering that it's got a completely custom CPU from long ago... the Centurion assembly language "makes sense" coming from a Z80, 6502, 6800, AVR perspective.
@robbybobbyhobbies Жыл бұрын
Yeah, I had vague memories of printing in a similar way using 6502 (the jsr business), back in the 80s on a BBC Model B.
@christophernetherton9389 Жыл бұрын
I recall that a few episodes ago you mentioning that you like switching up the machines you work on. I full agree and enjoy this as I too would bet bored plugging away at the same system for any extended period. I really enjoy your format and am looking forward to some Bendix stuff! Thank you for your work covering all of this on video; I know that it must be a tremendous amount of overhead.
@kenromaine2387 Жыл бұрын
Good job using the Centurion assembler. Next rev. of the "Hellorld" program need to do a "Rolling Barber Pole of "Hellorld " . Should be a easy edit to the assm. code by adding a few spaces after "Hellorld " and not sending any LF or CR codes to the terminal. The ADDS terminal should already be setup to do a Auto-LF after receiving the 80-th chart. sent.
@spacewolfjr Жыл бұрын
Great trick for v2! Thank you for all you've done for this project, I don't think we'd be anywhere as close without your help. Also thank you for all your family has done for salads, especially the Ceasar!!
@johncarey9149 Жыл бұрын
Loved the glimpse of the AH at the start, as for HELLORLD, most of if sailed way over my head, but I did thoroughly enjoy the video, thanks ... 🙂
@cacheman Жыл бұрын
5:56 It's ASCII... if you set the high-bit of every octet. The actual ASCII would be "48 45 4c 4c 4f 52 4c 44 21 0D 0A 00". (I know ASCII is 7-bit, don't at me)
@kellyherald1390 Жыл бұрын
I had a TI 99/4A back in 1983 and I taught myself how to program on that system. I learned assembly as well. I decided I needed a program that would show a grid of large "pixels" in a 16x16 grid. I could toggle each "pixel" on or off, rotate as well as invert. All the while it was showing the hexadecimal value I needed to use to generate sprites in Extended BASIC. That assembly program was over 800 lines of code. That computer is what gave me the programming bug that I "suffer" from to this day as I've been a VB (4,5,6), C#, C++ and now a TSQL developer.
@Stabby666 Жыл бұрын
I remember the old Ti99, it was absolutely crippled by the convoluted method it had to use to access RAM - so was actually far slower than other 8-bit machines at the time, even though they referred to it as a 16bit machine. I actually had one and switched to the Speccy at the time (well, I nagged my parents until they gave in!)
@andrewdunbar828 Жыл бұрын
It had the best CPU crippled by the worst system architecture.
@billynomates920 Жыл бұрын
i thought *halaurel* was what retail shops call this time of year when they have halloween decorations one side of the aisle and Christmas decos, the other! 😆
@WelcomeToMarkintosh Жыл бұрын
You've started a MOVEMENT! This is so awesome-I love it! Hope to see you at the Museum tomorrow!
@KeritechElectronics Жыл бұрын
Hey, that's some nice old school programming! None of that newfangled object oriented rubbish. I may try dabbling with assembly someday.
@barkeaterden Жыл бұрын
YAY! Hope the travels are going well!
@jonathanwhiteside6092 Жыл бұрын
Ok, so you've got me... I now need to see if I can write a 'Hellorld!' program for a couple of my machines. One is less unique than the other, of which there weren't many made, but I'm going to hold of saying what they are so nobody beats me to it, though they probably will as I'm rubbish at this sort of thing!!
@FreejackVesa Жыл бұрын
I learned programming with COBOL and FORTRAN then jumped to OOP with C and its derivatives. After learning those three basic languages, I have yet to encounter a new language that poses any difficulty to learn. That being said, I always wish I had started with an assembler/symbolic language. While learning some type of assembly won't be hard, it's actually not as easy as moving to languages of higher abstractions. I find that really fascinating - the learning more abstracted languages seems more difficult for me compared to less abstracted languages. I guess it's probably not that unusual, still I find it fascinating. Also, my Dad and I watched your video this afternoon and we got into a discussion about how back in the late 70s and early 80s he remembers purchasing a Apple II knock off computer in Hong Kong where our family lived at the time. We really wished we had that strange and esoteric knock off computer, what a fascinating system that would be to dissect! Even though memories are somewhat murky, he remembers putting it together in probably 81 or 82 and it was meant to basically mimic what the Apple II offered in its spec. Unfortunately it has disappeared into the ether many decades ago.
@annyone3293 Жыл бұрын
> I have yet to encounter a new language that poses any difficulty to learn. I’d recommend trying an array programming language (APL or BQN) or something “purely” functional (like Haskell). Those are not hard per se but require a fair bit of mind bending.
@sebastiendumais4246 Жыл бұрын
This video is the one that gave me the little push to actually make the homebrew I had in my head for so long…. I really want to add my “Hellorld!” On that page 😁
@Scott-i9v2s Жыл бұрын
A nice test for when the rotating-drum memory of the G100 works?
@ronaldoakes7139 Жыл бұрын
I had to explain to my wife why I just yelled “blowup” at the TV: Around 1986 when I was a Computer Science undergraduate at the University of New Mexico, the assembly language class was taught using TI development boards that I was reasonably sure used the same microprocessor as the TI-99/4. When I saw the “BLWP” (Branch and load workspace pointer) instruction, I knew it was that processor. AFIK, it was the only, or one of very few, processors to use that register architecture so that one called a subroutine by loading a new set of registers, including IIRC, the program counter. A semester or two after I took the class, they changed to using 68000 and Atari 8000s.
@mrbrent62 Жыл бұрын
I’ve been wearing one of your awesome shirts. I posted to the Antique Computer Club page in Facebook at so many pictures from people who met you were posted.
@pasixty6510 Жыл бұрын
A very inspiring video again! Thank you so much. A comment to the experiment on the TI99: We had fun doing these experiments on our C64s. Try filling the entire screen with characters, e.g. „HELLORLD“ and compare the time it takes the machine to do it in BASIC and in ASM. Maybe you want to try this in another video. It’s astonishing.
@Starchface Жыл бұрын
That's the overhead of the BASIC interpreter. While the Print statement uses a machine-language routine, the parsing of the BASIC statements with every iteration destroys performance. That can be solved with an assembly-language implementation that calls the same output routine in ROM that BASIC uses. For an even better result you can write your own assembly language to output the values directly to video memory. It's more work, but for ultimate performance that's where you have to go. I don't know why I wrote this. I guess I'm reminiscing about better days. 😂
@philiptaylor1316 Жыл бұрын
Re the 9900 Branch and link instructions - eg BLWP. The TI9900 chip is almost unique in CPU design in that it does not have a stack pointer. The 990x processors were (if I remember correctly) designed to be communication processors rather than general purpose processors. A critical part of this design was a response to an interrupt. Interrupt processing must save the registers of the interrupted application, do work and then restore the registers. The TI9900 family does this by having a register bank pointer which points to a chunk of RAM that hold the registers. Interrupt switching then changes the value in the register pointer to another chunk of RAM and on completion restores the original value. The venerable PDP11 family uses a similar mechanism. Subroutines were an afterthought and could only be supported as a single execution unit one level below the main application. The main application would push the return address into register R11 (?) and then jump to the subroutine. On completion the subroutine would then jump to the address in R11. No further subroutine calls could be made inside the subroutine without saving the current R11 content, which made code reuse incredibly challenging. Thankfully other CPU chip makers implemented stack pointers. One other annoying detail - all TI900 instructions have to start on a even memory address as they are 16-bit instructions.
@GodmanchesterGoblin Жыл бұрын
Yes. Also, after the TMS9900, TI made the TMS99000 family (99105 and 99110), which included the BLSK instruction to implement a stack based mechanism for handling return addresses. This made nested routines in code much simpler to implement. The return call, if using R11 as the stack pointer, would be simply B *11+, which would restore the saved program pointer as well as auto-incrementing the stack pointer.
@jxrx Жыл бұрын
Can't wait to see Hellorld! on the vacuum tube computer!
@granturismo677414 күн бұрын
Say "Hellorld!" To the New Universe - thanks for helping us all get there David xx*
@johnm2012 Жыл бұрын
A good use of BASIC on the TI-99/4 might be for writing an assembler.
@richardtwyning Жыл бұрын
On the 99/4 I think you're branching to the VMBW video multiple byte write routine which will write the text to the VDP to be displayed. That routine will have it's own independent set of 16 registers to play with. The TMS9900 has a revolutionary architecture, far beyond anything else at the time.
@kevincozens6837 Жыл бұрын
I designed and built a custom 6809 based computer board that will fit in to an Altoids mint tin. It has a bit banged serial port. I will have to make it say "Hellorld!". I can also have it say "Hellorld!" on the 6 7-segment displays on the front panel by scrolling the characters through the display.
@GodmanchesterGoblin Жыл бұрын
I love TMS9900 assembly language. It was a key part of my life from 1981 to 1991 writing test software for a bunch of application specific computer hardware, although with the help of the additional instructions found in the less well known TMS99000. While registers held in RAM would not be efficient these days, it made OS calls and interrupt handling fast and efficient (change one pointer register in the cpu to get a whole new bunch of registers). That's part of what the BLWP instruction is all about, used for subroutine calls.
@spacewolfjr Жыл бұрын
The TMS9900 also had undocumented instructions for handling "Jello Puddin' Pops" in memory, the so-named BCxxx instructions.
@GodmanchesterGoblin Жыл бұрын
@@spacewolfjr I'm not aware of those. Is there any info out there? A quick search didn't find anything.
@spacewolfjr Жыл бұрын
Oh, I was making a joke there, Bill Cosby used to do ads for the Ti computers and Jello Puddin' Pops. It only seemed (il)logical that the chip designers would have seen the synergy and created specialized circuitry to handle gelatinous dairy products (Puddin' Pops).
@GodmanchesterGoblin Жыл бұрын
@@spacewolfjr OK, fair enough. My bad. We didn't have those ads in the UK as far as I'm aware.
@spacewolfjr Жыл бұрын
@@GodmanchesterGoblin I was wondering if you were from across the pond when I saw "Manchester" in your username. There's probably some very cheesy examples of the ads on KZbin if you're interested.
@clyde3013 Жыл бұрын
Hellorld and can't wait to see you at system source!
@joetoney184 Жыл бұрын
Wellp time to create a custom RISC-V core with a custom Hellorld instruction. Seems useful.
@khronos6922 Жыл бұрын
👹Hellord!👹 10 PRINT "Hellord!" 20 SYSTEM 😆
@kibawolf2501 Жыл бұрын
have you ever thought about or tried having a terminal in another room? either for multi user shenanigans or for other odd experiments.
@markhatch1267 Жыл бұрын
I do have an old Altos 5-15D Z-80 CP/M microcomputer in storage, that my parents bought in 1982 as their first office computer. Maybe could get it running some day. I would also like to build a working 8 bit system from TTL IC's.
@dhpbear2 Жыл бұрын
I remember that computer! It had 2 8-inch floppy drives oriented side-by-side, making for a whopping 17-inch-wide chassis!
@markhatch1267 Жыл бұрын
Ours actually had 2) 5-1/4 inch 720K double sided floppy drives. The case was about 12 inches wide and 16 to 18 inches long and about 6 inches in height. My dad bought it in June of '82. I had to keep regular back ups of the frequently used floppies because they only lasted about 1 or 2 months if used daily.@@dhpbear2
@Dirty_Bits Жыл бұрын
How about mechanical programming on a teletype???
@the123king Жыл бұрын
Assembly?! Gah, now i need to learn 1802 assembler...
@anotheruser9876 Жыл бұрын
@16:26 / @16:45 What calculator is that? Is that an old LED TI-30?
@smalltownMainer Жыл бұрын
i have the TI99 4a with the alps key switches. currently no monitor. so i have yet to try it, but i came advertised as working and came with some things, its in really good shape. my radioshack coco2 uses a tv but i would like to find a more period correct one, my vic 20, ibm 5150 and apple iie all have their correct monitor, and of course my radioshack trs80 model 3 as thats all in one. i only use them for the games as i never learned basic. i also have the atari 2600 and NES.
@RonJohn63 Жыл бұрын
4:01 Ancient scribes did this, too.
@SeekingTheLoveThatGodMeans7648 Жыл бұрын
I once saw a "Hello world" in Fortran which had the printout routine hardcoded in machine code as a (surprisingly short) array. It ran on VAX Unix both BSD and AT&T System V. Some hacking should be able to come up with the equivalent on Linux.
@williamsquires3070 Жыл бұрын
I think you forgot the HLT instruction right before LDAB B’00000010’. 🤔
@PhilWheatInAustin Жыл бұрын
He never did an RSR, so it wasn't needed.
@galeng73 Жыл бұрын
I am "new" to this channel. In reality, I've been a subscriber for a long time. I just don't say much. I'm trying to work on that. I'm trying to comment more often. Anyhow, I'd wondered about hellorld before. I figured it was something similar. I figured it was a malformed 'hello world'. So, my powers of observation are doing okay!
@psikeyhackr6914 Жыл бұрын
Greetings Galaxy! We have a galaxy of transistors on the planet now. We must reach out to the silicon aliens.
@swedenfrommycam Жыл бұрын
To repeat the past won't let us enter next time....
@8bitwiz_ Жыл бұрын
I don't keep too many old systems around in a ready-to-program state, but I do have a couple of Heathkit ET-3400 trainers. They're always ready. So here's one for the Heathkit ET-3400. It wouldn't be so long except that it only has six digits, so it needed to do some scrolling. Also nice was that I didn't need to display a "W" on a seven-segment display! (Loads at 0000) CE0026DF 24BDFCBC C606A600 270108BD FE3A5A26 F5CEC000 0926FDDE 24A60027 DF0820DF 0000374F 0E0E7E05 0E3DA000
@ericwazhung Жыл бұрын
Nice. And good call about the seven seggers... that gives me another path to consider.
@ingmarm8858 Жыл бұрын
I did it on a Signetics 2650 system based on the 1979 Electronics Australia magazine project. It's on my YT channel. My last post seems to have been deleted...
@ronmaxwell5394 Жыл бұрын
I, for one, welcome our new Hellorld overlords.
@highpath4776 Жыл бұрын
Cat just yawned "hellorld"
@sfperalta Жыл бұрын
It looked like he skipped entering the HLT instruction on the Centurion, which means the return from the PRINTNULL subroutine would have just resumed executing at the top of the PRINTNULL subroutine, but it didn't seem to have any impact on the program. I'm surprised it didn't crash! (Maybe it did LOL.)
@michaelthomsen8771 Жыл бұрын
So I was not the only one noticing 😊
@sfperalta Жыл бұрын
Then again, that’s the whole theme of this episode… stuff he forgot to type in! 🤣
@ozzie_goat Жыл бұрын
I can do one on my Apple IIGS if that counts...
@brianhiles8164 Жыл бұрын
(19:35) _“There are 16 workspace registers: R0 through R16.“_ Wouldn´t that be instead R0 through R15?
@Alexis_du_60 Жыл бұрын
Would a machine that has two architectures in one (a la DEC Rainbow) would satisfy rule #2's requirement even if it's two common architectures (in my case, x86 and PowerPC/AIM PowerISA)? If yes, I've got a potential candidate... It's not a very unique machine, but I feel it's a significant oddity that it would qualify.
@bytesabre Жыл бұрын
Revision is coming up in March next year maybe this is the first step to doing a demo on Centurion and submitting it to the oldschool compo?
@wiwingmargahayu6831 Жыл бұрын
wow your computer behind you really amazing Sir
@ReneKnuvers74rk Жыл бұрын
One moment I thought you would run Hellorld! on a pinball machine
@mekafinchi Жыл бұрын
I'm working on a little fpga computer and the first code it'll run will be hellorld :)
@jimsimpson1006 Жыл бұрын
2:56 sounds very like the old DOS debug program!
@evensgrey3 ай бұрын
The TI99/4 has a 16-bit processor, but the processor has no direct access to main memory. Instead, the main memory is accessed through the video chip, and would be considered as video memory only if this machine wasn't designed in this strange way. This design choice famously makes this computer far, FAR slower than it would be if it used a more conventional design. It would also have required much more expensive memory, making it far to expensive in the period it was built.
@alexandervonzoller-sakharo6386 Жыл бұрын
Wait until you see it run through my modified NorthStar Horizon with the program inputted through paper tape.
@eDoc2020 Жыл бұрын
Does it need to be software? I have some ideas that are more hardware-based and as such they would violate rule #1. Do you think you could make an exception?
@fnjesusfreak Жыл бұрын
I found a PNG where I had written this: "BA0C01B409 CD21B8004C CD2148656C 6C6F726C64 210D0A2400". Looks like code for an x86 running MS-DOS, juding by the CD21s.
@jaedenspider877 Жыл бұрын
Hello world
@tarzankom Жыл бұрын
When are you going to try getting the printer working?
@DAVIDGREGORYKERR Жыл бұрын
When will someone create a new version of the TI99/4A running a TMS99105A with 512MB of RAM and a VGA adapter.
@Peter_S_ Жыл бұрын
It will still feature 128 words of 'scratchpad' RAM.
@DAVIDGREGORYKERR Жыл бұрын
@@Peter_S_ I would have thought that 15GB=536870912 Bytes of RAM.
@GodmanchesterGoblin Жыл бұрын
Back around 1988 I designed a colour graphics card for a TMS99105 system and wrote the device drivers. The display card used the MHS82716, and had 128k bytes of RAM. Not VGA though, but it supported text and graphics with sprites. The host used the 74LS610 memory mapper chip and supported up to 2MB of system memory. The graphics project died, but the rest of the system was in production for around 10 years from 83 to 93. It was a key part of my career in hardware and software design. I still have some of that hardware in my collection.
@highpath4776 Жыл бұрын
Systems needed the Desktop system and the Bendix/es ?
@freeculture Жыл бұрын
Hellord! to you too! I totally did not see the 660 instead of 60 🙂
@jasonsdodd Жыл бұрын
It's "Hellorld" for me from now on.
@berndeckenfels Жыл бұрын
That convention that the JSR 0x8623 reads from the next byte of the return address (and then jumps back after the 0 byte) is odd
@heinzk023 Жыл бұрын
But it's rather smart. It makes it easier to place the text right un the middle of the code and it spares a load instruction for the start of the text. However, it only works for static text.
@berndeckenfels Жыл бұрын
@@heinzk023 or self modifying code ,)
@nathanjohnson97153 ай бұрын
oh weird, so the registers on the ti-99 are in memory? Does the cpu not have its own registers, or are these just sort of extra pseudo-registers?
@1kreature Жыл бұрын
A proper generic print string subroutine would pick up the address for what is to be written either on a stack or pre-loaded in a specific register. Using the return address and expecting data to follow inline in the program code after the jump essentially means no text can be re-used. In addition, the program ends returning from subroutine into data. It should either halt or somehow return to the loader no? I wonder, can you Re-Re-visit ?
@rivimey Жыл бұрын
I have met many "proper" instances of print string that use this exact technique. Embedding data after the JSR was a well known and frequently used technique "back then" as it avoided lots of register /memory moves at a time when literally every instruction cycle counted.... and no, because of the incrementing byte load, the JSR return address is modified to point to the byte after data.
@1kreature Жыл бұрын
@@rivimey Ahh, reusing the return vector also as counter ofc. But still, more reusable would be nicer in the sense that it can be expanded and used later in more complex programs. After all, printing text based on conditional checks is very common and useful. For example when creating programs to debug other parts of the system.
@ericwazhung Жыл бұрын
@@1kreature It's entirely plausible there are two print subroutines... printing from a buffer is certainly necessary at times. This one clearly is just for printing hardcoded statements. I thought it pretty clever, incrementing the return address with the data.
@1kreature Жыл бұрын
@@ericwazhungYeah, but I am not talking necessarily about printing from buffer. Mostly what I found useful when dealing with limited systems like this has been the ability to reference bits of text to be printed from a library of words and phrases to be reused. Loading the reference and calling the function then becomes quite lean. It would also have been fun to see what registers were available for passing such information to a subroutine as well. For all I know the system does not even have a register that is not part of one or more ALU operations.
@ericwazhung Жыл бұрын
@@1kreature I'm not quite visualizing what you mean... are you suggesting combining a bunch of phrases like "Warning"/"Error:" "Disk"/"Printer" "I/O"/"Not Ready" ? So how would you do it...? I think you're missing the point, this function is almost certainly not the *only*, nor probably even most-used, text-printing function. It''s just quick and easy when that's all you need... the function itself is probably nothing more than a loop with only a few assembly instructions that calls another function that puts each individual character... like the difference between C's puts() and printf(). Each has its purpose... If you're familiar with AVRs, it's even more relevant there since the program memory has to be accessed differently than RAM. As I recall: This function would be similar to PRINT("Hellorld") which is a macro to puts_P(PSTR("Hellorld")) which puts the string in program-memory, then calls puts_P() on that string... But with puts_P() alone you could reference any string at any address (in program memory)... But it just happens to be that PRINT() is so useful they created a wrapper for it. [puts() is an entirely different function for printing a string in RAM]. So, this is clever... it'd be much harder to do on a system that automatically places the program counter on the stack, instead of a register, when calling a subroutine... because if the subroutine *uses* the stack, the first thing it would have to do, before any pushing of registers, is store the address where the program counter was stored on the stack (to where? A register that it'll clobber for the caller?). It's a clever solution for this particular CPU architecture that makes for a *very small* subroutine like PRINT() which folk use often-enough to justify a few extra bytes instead of having one single all-encompassing puts()-like (or printf-like) subroutine whose arguments alone would probably only require a few such calls to more than make up for the program-space usage of the extra easier subroutine.
@dhpbear2 Жыл бұрын
I also read it as 'hell-orld' :)
@Daniel32396 Жыл бұрын
Looks like that 6 key is a bit sensitive.
@doorhanger9317 Жыл бұрын
And there's ne thinking this had to do with 8 letter file names or something
@MinorLG Жыл бұрын
I want to program in hollorld now on my pidp11/70via switch toggles now
@christophernetherton9389 Жыл бұрын
I would also consider this the VIC-20 friendly version of HW ;)
@neilbarnes3557 Жыл бұрын
Just a small point - your "HELLOLRD" string isn't ASCII, it's ASCII with the top bit set. Which given some of the 8-bit micros around in the seventies might have output graphics, or flashing text, or inverse text... maybe even actual text! p.s. I've just built myself a new 65c02 proof of concept SBC that has no fixed memory on board and requires the serial download of a binary file before it will run anything. It could be a tiny boot loader or (as I'm using it at the moment) it could be e.g. MS Basic from 1976. It's definitely an IPL though :)
@rivimey Жыл бұрын
Confused... where does the first instruction after reset live? Do you write ram with something other than the 6502 and then bring the 6502 out of reset to run it?
@neilbarnes3557 Жыл бұрын
@@rivimey I use three 74lv8153s (which accept UART data if it's in the right shape) to drive the address and data; the signal which enables their outputs disables the 65c02 output busses and holds the reset low. Once the upload is finished the 65c02 is enabled and the reset goes high, so it wakes up. If you remembered to include the reset vectors in your initial hex file... I massage the hex file to give the specially formatted file that the 8153s require (they accept a four bit data half and a 0-7 address, so need two writes per byte).
@jeremylindemann51175 ай бұрын
Would the CPU-6 be considered a CISC processor or is that not relevant to CPU's from that era?
@minty_Joe Жыл бұрын
Have it print "All Your Base Are Belong To Us!" or "Don't Panic!" or "Bite My Shiny Metal A**!".
@eaglewolf404 Жыл бұрын
He said the word(s)!!!!!
@l3gacyb3ta21 Жыл бұрын
I should put Hellorld on the iPod Classic!
@TheHylianBatman Жыл бұрын
I wonder if one could hook up 9 Commodore 64's, and have them display one huge letter of "Hellorld!" each?
@senilyDeluxe Жыл бұрын
I have enough C64s to pull it off, but not enough power supplies. And unless I use as many tiny TVs as possible for it, the total image size will be... smol. And then again it'll be an insane amount of work. And then again I'd rather use the C64s to listen to music. I have enough TVs/monitors to pull it off, but none of them are identical apart from two 1701s.
@TheHylianBatman Жыл бұрын
@@senilyDeluxe Well, it's a cool thought, nonetheless!
@dawnofclarity Жыл бұрын
Hmm… I have A Tms9995 based computer, built from a kit in the 80s. Might give this a whirl.
@stuartc2962 Жыл бұрын
That sounds like a Powertran Cortex! ;-)
@paintedblack2806 Жыл бұрын
I really enjoy your channel. Great contents very well explained. Making these video's must be a hell of a lot of work. This time, I have a little question: I'm not familiar with the specific Centurion assembly, but shouldn't there be some kind of an 'ENDPROG JMP ENDPROG' or a 'HLT' between the 'JSR PRINTNULL' and the 'DW X'8D8A'' lines so not to execute the bytes 0x8a, 0x8d, 'HELLORLD'!, 0x00 as part of the program after returning from PRINTNULL ? Or are DB, DC and DW allocations automatically put in a different data segment? I'm looking forward to your next video!
@Mijyuoon Жыл бұрын
It's a bit more cursed from my understanding, the print subroutine *modifies the return address* while consuming those data bytes to print them, so when the `RSR` opcode is executed it returns to the point just past the string data. Instead what seems to be missing is a `HLT` right before the PRINTNULL entry point to stop the CPU from getting back into the subroutine code the second time.
@The_Traveling_Clown Жыл бұрын
I can't find that mini memory cartridge in crapbay 😢. Is there an alternative I can get for ti 99?
@ivuldivul Жыл бұрын
5:58 At this point I was just wondering why this text is embedded here and how's return from previous subroutine won't cause CPU to execute data. Oh! The abuse! 😂
@8bitwiz_ Жыл бұрын
The text is stored inline with the code. The subroutine is called with the return address in an index register, making it easy to use whatever follows the JSR as data. When done, the register will naturally point to the next instruction. Most common 8-bit and 16-bit microprocessor instruction sets require you to get the return address from the stack to do this, and then put it back when you're done. It's also why David's initial mistake was so benign. Since there were no references in that code, there were no references to be messed up by a few dropped bytes. It does cause heck with code-tracing disassemblers, though. They would have to know that the particular subroutine expected a specific format of data after it. It might be a zero-terminated string, it might be a few integers, who knows. You would need a way to manually override what a disassembler expects after a subroutine like this.
@ivuldivul Жыл бұрын
@@8bitwiz_ David explained it well while writing his version. Still that's not a common practice and would raise my eyebrows if I stumbled upon it.
@lorensims4846 Жыл бұрын
TI-99/4 is plenty unique. It's not a 6502 or 8080 or Z-80 or even 8088. Many people don't reallize this was the first consumer 16-bit CPU competing against the 8-bit machines of the day. Also, as you suggested, TI kept specific programming information very close to their vest. You were supposed to "just use BASIC."
@anvz6 Жыл бұрын
If I remember right, mini memory includes an assembler... No need to use easy bug for this.
@stuartc2962 Жыл бұрын
That was the Line By Line Assembler supplied on a cassette tape. Loading that would have added another element of nostalgia. ;-)
@ghohenzollern Жыл бұрын
Although it technically works, I think you made a programming error in your centurion program. Your end statement should be after your JSR. As it is, after returning from your subroutine it will attempt to run your subroutine again but with garbage data, and never actually reach your end statement as it is after your RSR.
@8bitwiz_ Жыл бұрын
More specifically, it needs some sort of exit right before PRINTNULL. Given how programs usually get started by operating systems, probably just an RSR should do. A sharp-eyed code golfer would simply move the PNEND line up there to save an instruction. What the code should do as-is, is that whatever is in the accumulator (probably an 0x02) will be printed, and then it will return to the caller (operating system). The "end statement" is just a pseudo-op for the assembler that says there is no more code, and here is the entry point.
@ghohenzollern Жыл бұрын
@@8bitwiz_ ah okay, I didn't realize that was an assembler directive and not an assembly instruction.
@andrewdunbar828 Жыл бұрын
My ears perked up!
@falksweden Жыл бұрын
I've heard of hoarding, but this must be hellorlding? :)