In message <
[email protected]>, dated Sun, 10
I agree, but why are programming languages (except vintage BASIC)
written so as to be nearly (or quite) unreadable by humans?
You refer of course to write-only languages like C++. It's because the
practitioners enjoy the cryptic-ness of it all, and are usually inept
at the use of real (human) languages. Posters to this group have noted
that, if they take over someone else's C code, they first run it
through a comment stripper.
I like to program in PowerBasic for PC-type stuff (engineering apps
and test software) and assembly for embedded stuff, both heavily (and,
I hope, literately) commented.
John
.SBTTL . MACRO : GEAR
; SIMULATE A GEAR PATTERN WITH POSSIBLE SHORT TEETH
;
; MACRO PARAMS ARE...
;
; 0 CHANNEL NUMBER
; 1 START POINTER
; 2 NUMBER OF PULSES 'N' 1..512
; 3 DC BASELINE
; 4 WAVESHAPE (NOT IMPLEMENTED YET)
; 5 TOOTH WIDTH
; 6 DEFAULT TOOTH HEIGHT
;
; 7 SHORT PULSE INDEX 1..N } REPEAT, UP TO 16
; 8 SHORT PULSE HEIGHT } EXCEPTION TEETH
; A0 SWEEPS PARAMETERS
; A1 AIMS AT PTRn REGISTER
; A2 AIMS AT WAVn
; D0 PULSE LEVEL
; D1 IS BLOCK START POINTER
; D2 PULSE POSITION, NORMALIZED
; D4 TOOTH WIDTH, AS DBF
; D5 TOOTH INDEX, 0..N-1
; D6 TOOTH COUNT N
GEAR: MOVE.W MP0.W, D0 ; FETCH CHANNEL NUMBER
JSR MAPP.W ; AND MAP SOME STUFF
TST.W D7 ; DID THAT WORK?
BNE BADMAC ; NOPE.
LEA.L WAVX(A1), A2 ; AIM A2 AT WAVn REGISTER
LEA.L PTRX(A1), A1 ; AND A1 AT PTRn
MOVE.W # 0300h, D7 ; ANTICIPATE ERROR CODE 3
; == ILLEGAL TOOTH COUNT ==
MOVE.W MP2.W, D6 ; EVAL NUMBER OF TEETH:
BEQ BADMAC ; 0 IS SILLY, FOLKS.
CMPI.W # 512, D6 ; CHECK LEGALITY
BHI BADMAC ; BAIL IF TOO MANY
; FIRST, FILL THE WAVE BLOCK WITH THE BASELINE VALUE
MOVE.W MP1.W, D1 ; GET START LOCATION
MOVE.W D1, (A1) ; POKE FPGA 'START' POINTER
MOVE.W BSIZ.W, D7 ; AND NAB BLOCKSIZE
SUBQ.W # 1, D7 ; -1 FOR SILLY 'DBF' LOGIC
; WHICH *DOES* WORK OK FOR 65536!
MOVE.W MP3.W, D0 ; FETCH THE GEAR ROOT LEVEL
GROOT: MOVE.W D0, (A2) ; POKE BASE VALUE INTO RAM
DBF D7, GROOT ; FOR THE WHOLE BLOCK
; NOW LOAD THE BASIC GEARTOOTH PATTERN
CLR.L D5 ; START WITH TOOTH # 0
MOVE.W MP6.W, D0 ; AT THE DEFAULT TOOTH HEIGHT
MOVE.W MP5.W, D4 ; GET NORMALIZED TOOTH WIDTH
MOVE.W DNORM.W, D7 ; AND DENORM FACTOR
BEQ.S BEER ; 0 MEANS DON'T SHIFT!
LSR.W D7, D4 ; ADJUST WIDTH TO ACTUAL BLOCK SIZE
BEER: TST.W D4 ; DID WE CRUSH WIDTH TO ZERO?
BEQ.S NORTH ; DBF COUNT OF ZERO MAKES WIDTH 1!
SUBQ.W # 1, D4 ; OR ELSE USE REQUESTED WIDTH, DBF FORM.
NORTH: JSR TOOTH.W ; CREATE ONE TOOTH
ADDQ.W # 1, D5 ; COUNT IT DONE
CMP.W D6, D5 ; DONE ALL, 0 TO N-1?
BLO.S NORTH ; HANG IN THERE, KID.
; NOW DO THE EXCEPTIONS: FOOLISHLY, WE IDENTIFIED THE EXCEPTION
; TEETH AS 1..N, SO WE'LL HAVE TO ATONE FOR THAT.
MOVEA.W # MP7, A0 ; AIM AT FIRST POSSIBLE EXCEPTION ENTRY
MOVE.W # 16-1, D2 ; ALLOW UP TO 16 EXCEPTION TEETH
TOPIX: MOVE.W (A0)+, D5 ; NAB THE TOOTH INDEX
BEQ.S GROUT ; AN INDEX OF 0 ENDS THE LIST
CMP.W D6, D5 ; IF INDEX IS SILLY,
BHI.S GROUT ; WE'LL QUIT AS WELL.
SUBQ.W # 1, D5 ; OK, ADJUST THE INDEX.
MOVE.W (A0)+, D0 ; FETCH THE 'SHORT' PULSE HEIGHT
JSR TOOTH.W ; AND OVERWRITE STANDARD GEAR TOOTH
DBF D2, TOPIX ; DO ANOTHER TOOTH, MAYBE.
GROUT: JMP OKAY.W ; DONE THE LAST OF THE MEAN MOLDY MACROS!