[comp.sys.cbm] HandyHint

fred@cbmvax.cbm.UUCP (Fred Bowen) (04/30/87)

I thought it might be fun to drop some programming hints, from time to time,
on the C64/128 community.  Surely there are a few crusty 8-bit hackers still
out there who will appreciate them... 

One problem with a great many programs I've seen and used stems from the
difficulty of finding out if a serial bus device exists.  Until the 128's
TRAP statement came along, most programs either hung or crashed with a
DEVICE NOT PRESENT error.  I hate when that happens!  And it's fairly easy
to test for that situation and handle it in a dignified manner.  Try this:

	C64's:		10 POKE 144,0		:REM CLEAR ST
			20 POKE 780,unit	:REM LDA unit
			30 SYS 65457		:REM JSR LISTEN
			40 POKE 780,1		:REM LDA SA
			50 SYS 65427		:REM JSR SECOND
			60 IF ST<0 THEN PRINT"DEVICE NOT PRESENT!"

This can be collapsed into a one liner, of course, as in the 128 version:

  10 POKEDEC("90"),0:SYSDEC("FFB1"),unit:SYSDEC("FF93"),1:IF ST<0 THEN...

But I find the following the best case- it works on either machine:

  10 T=ABS(PEEK(65533)=255)	:REM T=0 IF C64,  T=1 IF C128
  20 A=780:IF T THEN A=6
  30 POKE 144,0: POKE A,unit: SYS65457: POKE A,1: SYS 65427
  40 IF ST<0 THEN do whatever you wanna do if unit ain't there

This works for disk drives, printers, and such.  And it's easily converted to
machine code.  Just remember to do all this in BANK 15 (IO, ROMs) on the 128.
--
--
-- 
Fred Bowen			uucp:	{ihnp4|seismo|caip}!cbmvax!fred
				arpa:	cbmvax!fred@seismo.css.GOV
				tele:	215 431-9100

Commodore Electronics, Ltd.,  1200 Wilson Drive,  West Chester,  PA,  19380