ForthNet@willett.UUCP (ForthNet articles from GEnie) (03/15/90)
Date: 03-13-90 (11:44) Number: 3023 (Echo) To: ALL Refer#: NONE From: CHARLIE HITSELBERGER Read: HAS REPLIES Subj: BLAZIN' FORTH FOR C-64 Status: PUBLIC MESSAGE I have Blazin' Forth for the C-64, and the source code for the screens, as well as the source code for the core kernal. Ballantyne has put in enough drive support to accomodate a single 1541 drive or a 4040 drive. If you have 1581, RAM expanders, multiple drives, etc... you are in for a rude shock. You *STILL* only get 166 blocks of virtual storage. My mission, should I choose to accept it, is to make it support any type of drive configuration, including Creative Micro Designs Hard drive if I should ever get one of those. My questions: 1) Has this been done already? I find it hard to believe that I am the only one who ever wanted more virtual blocks on Blazin' Forth. 2) What is a good way to set it up? Obviously, I need a device table of sorts. I was thinking four bytes per element, with one word pointing to the CFA of the I/O handler of that device and a starting block number and number of blocks. Oops. I meant four WORDS, not bytes. The 4th word would be flags, i.e. Is the device mounted, etc... Any suggestions would be *GREATLY* appreciated, as my experience in designing Forth systems is very limited. Charlie Hitselberger ----- This message came from GEnie via willett through a semi-automated process. Report problems to: 'uunet!willett!dwp' or 'willett!dwp@gateway.sei.cmu.edu'
leff2@unix.cis.pitt.edu (Louis Leff) (03/17/90)
I and many others would be very interested in obtaining a copy of the BLAZIN' FORTH kernal code--I already got the system source screens with the package from that other commercial service (qlink) but I have no access to GENIE. Is there code available anywhere?? If not, can you send or post?? LL
ForthNet@willett.UUCP (ForthNet articles from GEnie) (03/22/90)
Date: 03-20-90 (15:04) Number: 3049 (Echo) To: ALL Refer#: NONE From: CHARLIE HITSELBERGER Read: (N/A) Subj: BLAZIN' FORTH FOR C64 Status: PUBLIC MESSAGE I am running a PD Forth which supports 166K of virtual memory (i.e. a single 1541 disk drive). Well, my system has 2 meg on it, and I want to redesign the block i/o. The coding is not a problem, the user interface design is. What should the virtual memory look like to the user? There are two ways I have considered: 1) have a device context switching word, and base everything off of the 0th block of that device. For instance, when I am using drive 8 I say something like " DR8 3 BLOCK " and it pulls in the 4th block of that drive to the memory buffer. Drive 9, 10, and 11 would be similarly handled, and I'd use a >BUILDS ... DOES> construct to define the drive switching words. 2) Have the entire disk drive array behave as a contiguous virtual memory plane. In other words, if I have two 1541's and two 1581's hooked up, that makes 170+170+800+800 = 1940K. Then I can say " 1653 BLOCK " and get a block from somewhere out there on drive 11 (the highest numbered device). This would entail maintaining a four-word per entry table: i/o handler address starting block ending block flags (physically mounted, virtually mounted, etc...) The 64's disk interface is kinda weird, it opens two channels for i/o to a drive when you do direct track/sector access. Suppose I open a channel to a disk but there's no floppy in it?! The drive errors out and I better tell the user about it. That device should be considered as "virtually mounted" but not physically mounted. Same thing happens when the user unexpectedly swaps disks. Opening the drive door automagically closes the i/o channel to the computer, but without telling the computer about it (!) Definitely a problem that will have to be addressed. 3) Some hybrid of the two schemes seems to be the best solution, but here is where I run into the brick wall between the right and left halves of my cerebral cortex. Someone please help!! Charlie Hitselberger ----- This message came from GEnie via willett through a semi-automated process. Report problems to: 'uunet!willett!dwp' or 'willett!dwp@gateway.sei.cmu.edu'
ForthNet@willett.UUCP (ForthNet articles from GEnie) (03/22/90)
Date: 03-20-90 (23:06) Number: 3053 (Echo) To: CHARLIE HITSELBERGER Refer#: 3049 From: JERRY SHIFRIN Read: NO Subj: BLAZIN' FORTH FOR C64 Status: PUBLIC MESSAGE CH>0th block of that device. For instance, when I am using drive 8 I sa CH>something like " DR8 3 BLOCK " and it pulls in the 4th block of that CH>drive to the memory buffer. Drive 9, 10, and 11 would be similarly This is how I've seen it implemented on other Forths, but as you know, it's Forth, so you can do whatever appeals to you <grin>! One advantage to specifying the device is that it should trigger the need to do things like FLUSH, EMPTY-BUFFERS, etc. Four drives on a C64??? Sheesh! --- ~ EZ 1.26 ~ ----- This message came from GEnie via willett through a semi-automated process. Report problems to: 'uunet!willett!dwp' or 'willett!dwp@gateway.sei.cmu.edu'
ForthNet@willett.UUCP (ForthNet articles from GEnie) (03/23/90)
Category 1, Topic 16 Message 17 Wed Mar 21, 1990 R.BERKEY [Robert] at 23:00 PST Re: BLOCK and BUFFER Charlie Hitselberger writes, 900320: > 2) Have the entire disk drive array behave as a contiguous virtual > memory plane. This has been the conventional Forth approach in polyFORTH, and also fig- FORTH. Then they include a user variable OFFSET , a value that is added to any block# input to BLOCK or BUFFER . Such a combination is sufficient to define DR8 in higher level. A block and buffer driver I did had a table of drives with each record containing: starting Forth block number ending Forth block number + 1 read-block routine (uses a device-relative block number) write-block routine (ditto) Another word DRIVE indexed that table. Then, defining DR8 would become: : DR8 ( -- ) 8 DRIVE @ OFFSET ! ; This setup was sufficient to handle a couple of floppies with various capacities, sector sizes, and formats; a small battery-backed-up ram disk, and one large hard disk. Robert ----- This message came from GEnie via willett through a semi-automated process. Report problems to: 'uunet!willett!dwp' or 'willett!dwp@gateway.sei.cmu.edu'
ForthNet@willett.UUCP (ForthNet articles from GEnie) (04/07/90)
Date: 04-06-90 (07:10) Number: 3099 (Echo) To: DAVID MEYERS Refer#: 3085 From: PETE KOZIAR Read: NO Subj: >64K FORTHS Status: PUBLIC MESSAGE I am most familiar with F-PC for the MS-DOS world. Here's how F-PC gets around the segmentation limits: Code Segment = Data Segment = Variables and CODE words Extra Segment = Each colon definition starts on a paragraph boundary, and NEST sets ES to the start of the current word. Other = The names for the words are kept in a separate segment that isn't dedicated to any particular segmentation register. Stack Segment = In plain-vanilla F-PC, it's set to the same as the Code and Data segments. It's relatively easy to separate out as another segment; usually, there aren't that many tasks, and the stacks are small, but I run many multiple threads under DESQview, and DESQview seems to require huge stacks. Hope this gives you some ideas! --- * Via Qwikmail 2.01 The Baltimore Sun ----- This message came from GEnie via willett through a semi-automated process. Report problems to: 'uunet!willett!dwp' or 'willett!dwp@gateway.sei.cmu.edu'
ForthNet@willett.UUCP (ForthNet articles from GEnie) (04/07/90)
Date: 04-06-90 (10:14) Number: 3100 (Echo) To: RANDY LAWRENCE Refer#: 3092 From: CHARLIE HITSELBERGER Read: NO Subj: BLAZIN' FORTH FOR C64 Status: PUBLIC MESSAGE Thanks a million, that's how I am going to do it. It might slow things down a bit, and I might change it later, but right now I want to get the darned thing up. My next problem is 1541 specific. Given a block offset number, in the range 0...169, I need to return a track/sector pair. For instance, 0 yields 1/0, 1 yields 1/4, etc... There will be exactly 3 leftover sectors, so I was intending to reserver 18/0, 18/1, and 17/20 as unused sectors. Then I could write a word that would fill those blocks with a pre-allocated BAM and a couple of files named "DON'T VALIDATE", "THIS DISK, IT", "CONTAINS BFORTH", "BLOCKS!!" or something along those lines. 17/20 just makes the math work out right in zone 1 of the disk (tracks 1-17 of 21 sectors each). I had written a semi-elegant (if such a thing can be imagined) routine in BASIC with an eye toward a direct assembler translation, but my assembled routine exhibits an "off-by-one" fencepost problem when crossing between zones 2 and 3, zones 3 and 4. Lately I haven't had much time to work on it. I suppose I could always go with Ballantyne's approach, but it seems like such a waste to not use track 18 in its entirety. Come to think of it, I'd have to give the new and improved 170K format a different name so that guys who want to read it using an unmodified BFORTH kernal wouldn't tear their hair out. Since most BFORTH files are transferred using FPORT, this is not as big a problem as it would seem, however. Again, thanks for the idea, and if you have any suggestions on this problem, please reply. Charlie Hitselberger ----- This message came from GEnie via willett through a semi-automated process. Report problems to: 'uunet!willett!dwp' or 'willett!dwp@gateway.sei.cmu.edu'
ForthNet@willett.UUCP (ForthNet articles from GEnie) (04/14/90)
Date: 04-12-90 (05:54) Number: 3113 (Echo) To: CHARLIE HITSELBERGER Refer#: 3100 From: RANDY LAWRENCE Read: NO Subj: BLAZIN' FORTH FOR C64 Status: PUBLIC MESSAGE |offset number, in the range 0...169, I need to return a track/sector |pair. For instance, 0 yields 1/0, 1 yields 1/4, etc... you might try converting blocks to virtual sectors: 4 CONSTANT SECTORS/BLOCK : >VIRTUAL // BLOCKS TO VIRTUAL SECTORS SECTORS/BLOCK * ; I calculate that block 90 starts at track 17 sector 20, which is the start of the 3 sectors you would like to skip. What I would do is add 3 to the virtual sector number if we are above block 89; : CORRECT // virtual-sectors -- corrected-virtual-sectors DUP [ 89 >VIRTUAL ] LITERAL > IF 3 + THEN ; Then convert the virtual sectors to pysical tracks and sectors. Your final track and sector mapping word might look something like this: : >T&S // -- track sector BLK @ >VIRTUAL CORRECT >PYSICAL ; I hope this gives you an idea or two. BCNU, Randy Lawrence KA7WAG --- ~ EZ 1.27 ~ blah! blah! blah! ----- This message came from GEnie via willett through a semi-automated process. Report problems to: 'uunet!willett!dwp' or 'willett!dwp@gateway.sei.cmu.edu'
ForthNet@willett.UUCP (ForthNet articles from GEnie) (07/11/90)
Date: 07-09-90 (00:01) Number: 3476 (Echo) To: ALL Refer#: NONE From: MATTHIAS GIWER Read: (N/A) Subj: 128 COMMORDORE FORTH Status: PUBLIC MESSAGE I am looking for friend a 128 Comm Forth. Can anyone help? ----- This message came from GEnie via willett through a semi-automated process. Report problems to: uunet!willett!dwp or willett!dwp@hobbes.cert.sei.cmu.edu
ForthNet@willett.UUCP (ForthNet articles from GEnie) (08/03/90)
Date: 08-01-90 (19:01) Number: 3595 (Echo) To: MATTHIAS GIWER Refer#: 3476 From: DAVID BREEDING Read: NO Subj: 128 COMMORDORE FORTH Status: PUBLIC MESSAGE There are a couple of options available on the C128. The first (and I think the best) is to use F83 CPM. This is a full featured FORTH with 'Standard' files and structure. If you are just learning FORTH this forth, and it's extensive shadow screens, is a MUST!!! The second option is to go into C64 mode and use Blazin Forth. This is a very good F83 Forth that runs in 64 mode. There is not presently, as far as I know, a FORTH that runs in native C128 mode. I have toyed with the idea of writing my own...but have never gotten around to it... ----- This message came from GEnie via willett through a semi-automated process. Report problems to: uunet!willett!dwp or willett!dwp@hobbes.cert.sei.cmu.edu
ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (09/03/90)
Date: 09-01-90 (11:35) Number: 3695 (Echo) To: MATTHIS GIWER Refer#: 3595 From: RANDY LAWRENCE Read: NO Subj: 128 COMMORDORE FORTH Status: PUBLIC MESSAGE I have a Forth written for the C128. It is a very hacked up version of Blazin' Forth. However, it is not finished. It lacks a file interface, so you cannot load source files from a disk. It also lacks a resident editor and assembler. And of course, it has no docs. If there is interest, I will put the (TSDS) assembly source into a self extracting archive and post it on ECFB. Randy --- ~ EZ 1.27 ~ AARGH! ----- This message came from GEnie via willett through a semi-automated process. Report problems to: uunet!willett!dwp or dwp@willett.pgh.pa.us